首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linq2Entites Count() with condition on bool不能像“我想的那样工作”?

Linq2Entites Count() with condition on bool不能像“我想的那样工作”?
EN

Stack Overflow用户
提问于 2013-01-15 18:03:53
回答 2查看 124关注 0票数 4

给定以下非常简单的linq语句

代码语言:javascript
复制
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified);

代码语言:javascript
复制
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified == true);

Verified是布尔值的地方,我得到了一个异常,说linq-2实体不支持它?

有一个非常简单的遗漏的东西-或者我应该从以下中选择一个:

代码语言:javascript
复制
a)
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

代码语言:javascript
复制
b)
vm.VerifiedGroups = db.ReportGroups.ToList().Count(g => g.Verified);

这两种方法都有效(我的列表只有30-50个,所以ToList不是问题)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-15 18:09:15

你什么都没错过。Linq to Entitities不支持带有谓词的计数。请参阅msdn文章Supported and Unsupported LINQ Methods (LINQ to Entities)

是的,您应该使用第一个选项,因为ToList()将执行查询并将所有实体放入内存:

代码语言:javascript
复制
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

即使您的ReportGroups表中没有太多记录,为什么要做一些速度较慢、使用更多pc、数据库和网络资源的操作呢?将传输一个整数值与传输50个ReportGroup实体的所有字段进行比较,从DataReader创建.net对象(并保持连接打开),迭代创建的列表,在每个DataReader实体上执行谓词方法。我认为在这里传输一个整数值是有效的。

票数 7
EN

Stack Overflow用户

发布于 2013-01-15 18:06:09

我会选择第一个选项,因为第一个选项不会带来计算计数的所有记录。在第二个选项中,ToList方法将带来数据并对其应用计数。

代码语言:javascript
复制
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14335230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档