找出linq完成了多少次迭代

时间:2012-10-08 03:58:52

标签: c# linq

我想知道LINQ完成了多少次迭代。所以我写了一个简单的查询

string xx = "The quick brown fox jumps over the lazy dog";

char search = 'f';

int j = 0;

var result = xx.Select((b, i) => 
{
    j++;
    return b.Equals(search) ? i : -1;
})
.Where(i => 
{
    j++;
    return i != -1;
});

MessageBox.Show(j.ToString());

我认为j将包含完成的迭代次数,但令人惊讶的是它仍为0.为什么会这样?其次,如何找出LINQ完成了多少次迭代。

2 个答案:

答案 0 :(得分:4)

那是因为LINQ是lazy evaluated。所以只有在必要时才会调用lambdas。

最后执行.ToList()以触发它,例如。

答案 1 :(得分:1)

你怎么知道它仍为零;你在var result =行后打印了吗?那是因为LINQ使用延迟执行。因此,即使您致电Select()Where(),他们实际上还没有任何事情。您可以通过在LINQ链末尾调用ToList()ToArray()来强制执行它。