给定以下非常简单的linq语句
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified);
或
vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified == true);
其中Verified
是bool,我得到一个异常说这是不支持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不是问题)。
你没有错过任何东西。Linq to entities不支持带谓词的计数。参见msdn文章支持和不支持的LINQ方法(LINQ到实体)
是的,您应该选择第一个选项,因为ToList()
将执行查询并将所有实体放入内存:
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();
即使你没有很多记录在你的ReportGroups
表-你为什么要做一些事情,这是较慢的,并使用更多的pc,数据库和网络资源?比较传输一个整数值与传输50个ReportGroup
实体的所有字段,从DataReader
创建。net对象(并保持连接打开),迭代创建的列表,对每个DataReader
实体执行谓词方法。
我会选择第一个选项,因为首先不会将所有记录用于计算计数。在第二个选项中,ToList
方法将带来数据并对其应用count。
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();