[英]Select objects in binding list that match criteria using LINQ?
我有一个包含100,000个对象的BindingList。 每个对象都包含一个bool属性,该属性指示对象是否已被修改。 我基本上想遍历对象,当我找到一个将bool属性设置为true的对象时,我想将其设置为false。 类似于以下内容:
foreach (myObject obj in bindingListOfMyObjects)
{
if (obj.Modified)
{
obj.Modified = false;
}
}
是否可以使用LINQ做到这一点? 那会比上面的代码快吗?
不。在LINQ中无法做到这一点。 为此,您需要直接在BindingList
修改元素。 LINQ只会返回一个新的IEnumerable
。
您可以使用Enumerable.Where
过滤集合,然后在循环中对其进行修改:
foreach (myObject obj in bindingListOfMyObjects.Where(o => o.Modified))
obj.Modified = false;
尽管可能会更容易理解意图,但这不会更快。
请注意,通常您不会使用LINQ进行真正的修改-LINQ查询就其性质而言,不会引起副作用(更改值)。 它们旨在用作查询 -因此过滤对象是适当的,然后进行循环设置。 有关详细信息,我建议阅读Eric Lippert在ForEach vs foreach上的文章 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.