考虑下面的代码示例:

IEnumerable<Y> myEnumeration = *some linq stuff into a datatable*

If (myEnumeration.Count() > X)
{
    foreach(Y bla in myEnumeration)
    {
       // do something
    }
 }

这将导致枚举2次吗?计数通话+ foreach?如果是这样,有什么办法可以避免枚举之一?

提前致谢

编辑了myEnumeration.Count-> myEnumeration.Count()(扩展方法)

最佳答案

我将这段代码放入LinqPad中,以显示生成的SQL:

IEnumerable<MyTable> myEnumeration = MyTable;

if (myEnumeration.Count() > 1)
{
    foreach(MyTable bla in myEnumeration)
    {
       // do something
    }
 }

生成的SQL如下:
SELECT * FROM [MyTable] AS [t0]
GO

SELECT *
FROM [MyTable] AS [t0]

因此,是的,数据将从数据库中检索两次。
考虑
List<Y> myEnumeration = *some linq stuff into a datatable* **.ToList();**

关于c# - 枚举性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21302189/

10-11 01:03