LINQ查询以调用实例方法

本文关键字:实例方法 调用 查询 LINQ | 更新日期: 2023-09-27 18:22:04

我写了一些形式如下的代码:

var  queryResult = from instance in someCollection
  where instance meets some criteria
  select instance;
foreach (InstanceType instance in queryResult.ToList()) {
    instance.SomeMethod();
}

这似乎有点多余,因为查询正在集合上迭代,然后还有另一次迭代来调用所有找到的实例上的方法。如果能够在查询中用调用实例方法,而不必编写额外的循环,那就太好了。

一个人怎么能只用一个查询就完成上面代码的功能呢?

LINQ查询以调用实例方法

您可以使用ForEach调用void方法:

someCollection
    .Where(instance => instance meets some criteria)
    .ToList()
    .ForEach(item => item.SomeMethod(param1, param2, ...)); // Use Foreach(SomeMethod) for methods w/no args

只需从代码中删除.ToList()即可。。而你只会在集合上循环一次。。

通常,建议不要在查询中产生副作用。。而像CCD_ 4这样的方法通常是副作用。。

除了删除ToList调用(这实际上是额外的和冗余的循环)之外,代码片段对我来说很好。

看起来好多了。不过,我不确定实际的迭代次数。

foreach (var instance in someCollection.Where(instance meets some criteria))
{
    instance.SomeMethod();
}