使用LINQ在绑定列表中选择符合条件的对象?

时间:2013-01-25 17:54:08

标签: c# linq

我有一个包含100,000个对象的BindingList。每个对象都包含一个bool属性,指示对象是否已被修改。我基本上想要遍历对象,当我发现一个bool属性设置为true时,我想将其设置为false。类似的东西:

foreach (myObject obj in bindingListOfMyObjects)
{
    if (obj.Modified)
    {
        obj.Modified = false;
    }
}

是否可以使用LINQ执行此操作?那会比上面的代码更快吗?

2 个答案:

答案 0 :(得分:2)

没有。在LINQ中无法做到这一点。为此,您需要直接在BindingList中修改元素。 LINQ只会返回一个新的IEnumerable

答案 1 :(得分:2)

您可以使用Enumerable.Where过滤集合,然后在循环中修改它们:

foreach (myObject obj in bindingListOfMyObjects.Where(o => o.Modified))
     obj.Modified = false;

这不会更快,但理解意图可能会稍微容易一些。

请注意,通常情况下,您不会使用LINQ来实际进行修改 - LINQ查询本质上不应导致副作用(更改值)。它们旨在用作查询 - 因此过滤对象是合适的,然后设置循环。有关详情,建议您阅读Eric Lippert's post on ForEach vs foreach