我想改变一个LINQ查询结果对象的一些属性,而不需要创建一个新的对象和手动设置每个属性。这可能吗?
例子:
var list = from something in someList
select x // but change one property
我想改变一个LINQ查询结果对象的一些属性,而不需要创建一个新的对象和手动设置每个属性。这可能吗?
例子:
var list = from something in someList
select x // but change one property
当前回答
不应该有任何LINQ魔法阻止你这样做。不要使用投影,那会返回一个匿名类型。
User u = UserCollection.FirstOrDefault(u => u.Id == 1);
u.FirstName = "Bob"
这将修改真实对象,以及:
foreach (User u in UserCollection.Where(u => u.Id > 10)
{
u.Property = SomeValue;
}
其他回答
我遇到了确切的要求(OP的问题),我没有看到在任何地方用表达来回答。
假设x是MyType类型,您可以调用一个返回MyType的方法,该方法接受x。在该方法中,您可以做所有您想做的修改。代码看起来像这样。
var list = from something in someList
select GetModifiedObject(x); // but change one property
private MyType GetModifiedObject(MyType x)
{
x.Property1 = "Changed Value";
return x;
}
使用ForEach
var list = from something in someList;
list.ForEach(x => x.Property = value);
var item = (from something in someList
select x).firstordefault();
会得到item,然后item。prop1=5;更改特定的属性。
或者您想从db中获得一个项目列表,并让它将返回列表中每个项目的属性prop1更改为指定的值? 如果是这样的话,你可以这样做(我在VB中这样做,因为我更了解它):
dim list = from something in someList select x
for each item in list
item.prop1=5
next
(列表将包含您的更改返回的所有项)
不应该有任何LINQ魔法阻止你这样做。不要使用投影,那会返回一个匿名类型。
User u = UserCollection.FirstOrDefault(u => u.Id == 1);
u.FirstName = "Bob"
这将修改真实对象,以及:
foreach (User u in UserCollection.Where(u => u.Id > 10)
{
u.Property = SomeValue;
}
如果你只是想更新所有元素的属性,那么
someList.All(x => { x.SomeProp = "foo"; return true; })