LINQ查询调用实例方法

时间:2014-09-17 01:52:57

标签: c# linq

我写了一些具有以下形式的代码:

var  queryResult = from instance in someCollection
  where instance meets some criteria
  select instance;

foreach (InstanceType instance in queryResult.ToList()) {
    instance.SomeMethod();
}

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

如果有人通过一个查询完成上述代码的工作怎么办?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

只需从您的代码中删除.ToList() ..您只需在集合上循环一次..

一般情况下,建议在您的查询中有副作用.. instance.SomeMethod()等方法通常是副作用。

除了删除ToList调用(这里真的是额外的冗余循环)之外,代码片段看起来还不错..

答案 2 :(得分:1)

看起来好一点。我不确定实际的迭代次数。

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