给定以下非常简单的linq语句
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified);或
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified == true);在Verified是布尔值的地方,我得到了一个异常,说linq-2实体不支持它?
有一个非常简单的遗漏的东西-或者我应该从以下中选择一个:
a)
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();或
b)
vm.VerifiedGroups = db.ReportGroups.ToList().Count(g => g.Verified);这两种方法都有效(我的列表只有30-50个,所以ToList不是问题)。
发布于 2013-01-15 18:09:15
你什么都没错过。Linq to Entitities不支持带有谓词的计数。请参阅msdn文章Supported and Unsupported LINQ Methods (LINQ to Entities)
是的,您应该使用第一个选项,因为ToList()将执行查询并将所有实体放入内存:
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();即使您的ReportGroups表中没有太多记录,为什么要做一些速度较慢、使用更多pc、数据库和网络资源的操作呢?将传输一个整数值与传输50个ReportGroup实体的所有字段进行比较,从DataReader创建.net对象(并保持连接打开),迭代创建的列表,在每个DataReader实体上执行谓词方法。我认为在这里传输一个整数值是有效的。
发布于 2013-01-15 18:06:09
我会选择第一个选项,因为第一个选项不会带来计算计数的所有记录。在第二个选项中,ToList方法将带来数据并对其应用计数。
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();https://stackoverflow.com/questions/14335230
复制相似问题