Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq查询结果的枚举_C#_.net_Linq_Foreach_Enumeration - Fatal编程技术网

C# Linq查询结果的枚举

C# Linq查询结果的枚举,c#,.net,linq,foreach,enumeration,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. 如何检查结果是否为空?我还尝试了if(result.Count()==0)

我有一些.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.
如何检查
结果
是否为空?我还尝试了
if(result.Count()==0)
,这也会在
foreach
循环中引发相同的异常。我还尝试了
foreach(result.ToList()中的var条目)
,这也引发了相同的异常

我试着按照这些建议去做,但没有成功

我也试过:

var result = db.storedProcedure(param)
if (!result.Any()) { return; }
var resultList = result.ToList();
foreach (var entry in resultList) {}
我仍然在
foreach
循环中得到相同的异常


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

只需在迭代之前将结果放入列表:

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

你为什么还要开那张支票?如果
result
中没有任何内容,您的循环甚至不会运行。就吃这个吧:

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

return;

如果没有记录,在
foreach
之后是否有不想运行的代码?如果没有,那么如果(!result.Any()){return;}没有做任何有用的事情。@BenRobinson:是的,这是正确的。我没有在这里包含该代码,因为我认为它与这个特定问题无关。@Grantwiney:
var resultList=result.ToList()
.Any()
检查之后。这很有效,谢谢。然而,我很好奇为什么会存在Linq
。Any()
方法,如果它所做的只是抛出一个异常。该方法存在的意义是什么?如何在不引发异常的情况下正确使用它?@smoothgrips如果在ToList之后仍然可以使用任何方法,代码的问题是在foreach之前枚举结果,这就是为什么会出现异常。通常情况并非如此,您可以根据需要多次枚举查询。但这只是一个特例。Sleman22我的意思是,为了使用
smoothgrips
抱歉,我会编辑也许你应该用谷歌搜索Linq Any方法,并了解网上也有很多很棒的Linq教程
smoothgrips
@smoothgrips,Any的优点是它允许你检查查询是否正确在很多情况下,你肯定是正确的。但是,根据结果是否为空,循环前后都存在代码。我没有包含该代码,因为它与特定问题无关。