在linq中不止一次枚举到sql存储过程调用

时间:2017-06-15 16:29:33

标签: c# asp.net linq linq-to-sql

我通过linq调用存储过程到sql。

var qlist = dbc.GetInfoByIDandDate(ID, aDate);  //sp call

if (qlist.Count() == 0)
{
  // error msg
}
else if (qlist.Count() > 1)
{
  // A different Error msg.
}
else
{
    GetInfoByIDandDateResult res = (GetInfoByIDandDateResult) qlist.First();
    string x = res.fieldXname;  // this is a field in the result set.
      ... and so on.
}

我尝试了各种各样的化身,但总是出错。 此迭代的错误是"查询结果不能多​​次枚举。"

处理此问题的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

当您调用Count()和First()时,实际上每次都在枚举。

我猜这可以解决问题:

var qlist = dbc.GetInfoByIDandDate(ID, aDate).ToList();

或者,甚至更聪明:

var qlist = dbc.GetInfoByIDandDate(ID, aDate).Take(2).ToList();

请注意,ToList()会缓存结果,以便Count()和First()不会再次运行查询。

相关问题