2013-08-06 29 views
-1

我有以下代码:IEnumerable的 - 的foreach - 一个查询的结果不能枚举不止一次

public static string ConvertParamToHTMLString(
          IEnumerable<GetParm_Result> paramList) 
{ 
    foreach (GetParm_Result result in paramList.ToList()) 
    { 
     ... 
     ... 
    } 
} 

我收到以下消息时,它试图执行的foreach:

查询的结果不能枚举多次。

我认为ToList()会解决这个问题..

+0

您是否可能在该方法的其他地方调用'ToList'(或任何其他可以迭代查询的方法),还是在将该序列传递给方法之前迭代该序列? – Servy

+0

'paramList'从哪里来?在将它传递给函数之前,您是否已经评估过它? – Blorgbeard

+0

是的,我已经评估过了。 –

回答

5

呼叫paramList.ToList()一次,并把它放在一个变量,然后枚举变量:

var list = paramList.ToList(); 
foreach(var result in list) ... 
foreach(var result in list) ... // No error here 
+0

请注意,问题中的代码没有两个foreach循环。这可能是问题(在这种情况下,问题需要改变),或者这可能是一个不同的问题,这不会解决。 – Servy

+1

我注意到它没有,只是为了演示这将如何工作。 – zmbq

0

既然你只显示执行一次,我假设你在执行查询之前(使用ToList,AsEnumerable或暗示使用foreach),然后再调用ConvertParamToHTMLString。如果是这种情况,那么你可以将结果保存在一个变量中并多次使用。实际上,由于您的功能已经接受IEnumerable<T>,您根本不需要更改该代码!

相关问题