Problem
I’d like to alter several properties of a LINQ query result object without having to create a new object and set each property manually. Is that even possible?
Example:
var list = from something in someList
select x // but change one property
Asked by Rob Volk
Solution #1
I’m not sure how to write a query. However, here is a more detailed LINQ expression example.
var query = someList.Select(x => { x.SomeProp = "foo"; return x; })
This replaces an expression with an anonymous method. This allows you to combine many statements into a single lambda. As a result, you can use this method to combine the two procedures of setting the property and returning the object.
Answered by JaredPar
Solution #2
If all you want to do is update the property on all elements, this is the way to go.
someList.All(x => { x.SomeProp = "foo"; return true; })
Answered by Jon Spokes
Solution #3
This is the one I favor. It’s possible to use it in conjunction with other Linq instructions.
from item in list
let xyz = item.PropertyToChange = calcValue()
select item
Answered by Jan Zahradník
Solution #4
You shouldn’t be able to do this because of any LINQ wizardry. If you utilize projection, you’ll get an anonymous type.
User u = UserCollection.FirstOrDefault(u => u.Id == 1);
u.FirstName = "Bob"
This will change the physical object as well as:
foreach (User u in UserCollection.Where(u => u.Id > 10)
{
u.Property = SomeValue;
}
Answered by Joshua Belden
Solution #5
Language Integrated Query, not Language Integrated Update, is not achievable with normal query operators. However, you might be able to disguise your change via extension methods.
public static class UpdateExtension
{
public static IEnumerable<Car> ChangeColorTo(
this IEnumerable<Car> cars, Color color)
{
foreach (Car car in cars)
{
car.Color = color;
yield return car;
}
}
}
You can now utilize it in the following manner.
cars.Where(car => car.Color == Color.Blue).ChangeColorTo(Color.Red);
Answered by Daniel Brückner
Post is based on https://stackoverflow.com/questions/807797/linq-select-an-object-and-change-some-properties-without-creating-a-new-object