枚举Linq查询结果

时间:2014-12-22 15:45:26

标签: c# .net linq foreach enumeration

我有一些.NET 4.5代码:

var result = db.storedProcedure(param)
if (!result.Any()) { return; }
foreach (var entry in result)
{
    // Some code...
}

foreach处,抛出异常:

The query results cannot be enumerated more than once.

如何检查result是否为空?我也试过了if (result.Count() == 0),并在foreach循环中抛出相同的异常。我也试过了foreach (var entry in result.ToList()),这也引发了同样的异常。

我尝试过关注herehere的建议,但没有运气。

我也尝试过:

var result = db.storedProcedure(param)
if (!result.Any()) { return; }
var resultList = result.ToList();
foreach (var entry in resultList) {}

我在foreach循环中仍然会得到相同的异常。

必须有一些方法可以轻松检查Linq结果集是否为空。我做错了什么?

2 个答案:

答案 0 :(得分:7)

在迭代之前将结果放入List:

var result = db.storedProcedure(param).ToList();
if (result.Count == 0) { return; }

答案 1 :(得分:2)

为什么你甚至要进行检查呢?如果result中没有任何内容,那么你的循环甚至根本无法运行。就这样:

var result = db.storedProcedure(param)
foreach (var entry in result)
{
    // Some code...
}

return;