【问题标题】:The query results enumerated more than once查询结果列举了不止一次
【发布时间】:2011-03-17 09:28:21
【问题描述】:
datacontextclass dc=new datacontextclass ();
var news= dc.GetNewsCompany(Int64.Parse ( _idCompany));
if (news.GetEnumerator().MoveNext())
{
foreach (var item in news)
{
drpListNews.Items.Add(item.Title);
}
}
返回错误:{“查询结果不能枚举多次。”}
如何在 LINQ 中检查结果!= null;
【问题讨论】:
标签:
c#
asp.net
linq
linq-to-sql
【解决方案1】:
过度使用枚举器是个坏主意 - 例如,它需要处理 - 您还没有这样做(这可能导致 SqlDataReader 保持打开状态 - 不好)。在这种情况下,只需枚举它。如果没有任何记录,那将是微不足道的:
if (news!=null)
{
foreach (var item in news)
{
drpListNews.Items.Add(item.Title);
}
}
如果您需要两次数据,请将其放入列表中:
var news = (blah).ToList();
【解决方案2】:
您正在创建枚举器两次。第一个是调用news.GetEnumerator(),第二个发生在foreach 循环的幕后。调用MoveNext 时进行的第一次“检查”似乎没有必要(除非有要迭代的项目,否则您不会进入foreach),因此只需跳过包裹循环的if 语句:
datacontextclass dc = new datacontextclass();
var news = dc.GetNewsCompany(Int64.Parse(_idCompany));
foreach (var item in news)
{
drpListNews.Items.Add(item.Title);
}
【解决方案3】:
将代码的第二行更改为
var news= dc.GetNewsCompany(Int64.Parse ( _idCompany)).toList();
它将消除问题。