查询结果枚举多次

发布于 2024-10-23 11:10:54 字数 388 浏览 1 评论 0原文

    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);
           } 
       }

return error:{"查询结果不能被枚举多次。"}

如何在 LINQ 中检查 result != null;

    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);
           } 
       }

return error:{"The query results cannot be enumerated more than once."}

how can check result != null in LINQ;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

沧桑㈠ 2024-10-30 11:10:54

疯狂地使用枚举器是一个坏主意 - 例如,它需要处置 - 您还没有这样做(这可能导致 SqlDataReader 保持打开状态 - 不好)。在这种情况下,只需枚举它。如果没有任何记录,那就很简单:

   if (news!=null)
   {
       foreach (var item in news)
       {
           drpListNews.Items.Add(item.Title);
       } 
   }

如果您需要数据两次,请将其放入列表中:

   var news = (blah).ToList();

Using an enumerator wildly is a bad idea - for example, it needs disposing - which you haven't done (this could lead to a SqlDataReader being left open - not good). In this case, just enumerate it. If there aren't any records, that will be trivial:

   if (news!=null)
   {
       foreach (var item in news)
       {
           drpListNews.Items.Add(item.Title);
       } 
   }

If you need the data twice, put it in a list:

   var news = (blah).ToList();
深海夜未眠 2024-10-30 11:10:54

您正在创建枚举器两次。第一个是通过调用 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);
} 

You are creating the enumerator twice. The first is by calling news.GetEnumerator(), the second one happens behind the scenes in the foreach loop. The first "check" that you make with the call to MoveNext does not seem necessary (you will not go into the foreach unless there are items to iterate over), so just skip the if statement wrapping the loop:

datacontextclass dc = new datacontextclass();
var news = dc.GetNewsCompany(Int64.Parse(_idCompany));
foreach (var item in news)
{
    drpListNews.Items.Add(item.Title);
} 
神妖 2024-10-30 11:10:54

将代码的第二行更改为

    var news= dc.GetNewsCompany(Int64.Parse ( _idCompany)).toList();

它可以解决问题。

Change the second line of your code to

    var news= dc.GetNewsCompany(Int64.Parse ( _idCompany)).toList();

it shall remove the issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文