是否有一种方法来做以下使用LINQ?

foreach (var c in collection)
{
    c.PropertyToSet = value;
}

为了澄清,我希望遍历集合中的每个对象,然后更新每个对象的属性。

我的用例是我在一篇博客文章上有一堆评论,我想迭代一篇博客文章上的每一条评论,并将博客文章上的datetime设置为+10小时。我可以用SQL来做,但我想把它保留在业务层。


当前回答

我正在做这个

Collection.All(c => { c.needsChange = value; return true; });

其他回答

我假设您希望在查询中更改值,以便为其编写函数

void DoStuff()
{
    Func<string, Foo, bool> test = (y, x) => { x.Bar = y; return true; };
    List<Foo> mylist = new List<Foo>();
    var v = from x in mylist
            where test("value", x)
            select x;
}

class Foo
{
    string Bar { get; set; }
}

但如果你是这个意思,那就不是舒坦了。

Use:

ListOfStuff.Where(w => w.Thing == value).ToList().ForEach(f => f.OtherThing = vauleForNewOtherThing);

我不确定这是否过度使用LINQ,但当我想要更新列表中特定条件的特定项时,它已经为我工作了。

你可以使用LINQ将你的集合转换为数组,然后调用array . foreach ():

Array.ForEach(MyCollection.ToArray(), item=>item.DoSomeStuff());

显然,这将不适用于结构体或内建类型(如整数或字符串)的集合。

不,LINQ不支持大规模更新。唯一更短的方法是使用ForEach扩展方法-为什么IEnumerable上没有ForEach扩展方法?

虽然您可以使用ForEach扩展方法,但如果您只想使用框架,则可以这样做

collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();

由于延迟求值,需要使用ToList来立即求值选择。