4

鉴于以下非常简单的 linq 语句

vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified);

或者

vm.VerifiedGroups = db.ReportGroups.Count(g => g.Verified == true);

bool在哪里Verified,我收到一个异常说 linq-2-entities 不支持?

错过了一些非常简单的事情 - 或者我应该从以下选项中选择一个:

a)
vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

或者

b)
vm.VerifiedGroups = db.ReportGroups.ToList().Count(g => g.Verified);

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

4

2 回答 2

7

你没有错过任何东西。Linq to Entity 不支持使用谓词计数。请参阅 msdn 文章支持和不支持的 LINQ 方法(LINQ to Entities)

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

vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();

即使你的表中没有很多记录ReportGroups——你为什么要做一些更慢、使用更多电脑、数据库和网络资源的事情?比较传输一个整数值与传输 50 个ReportGroup实体的所有字段、从创建 .net 对象DataReader(并保持打开的连接)、迭代创建的列表、对每个DataReader实体执行谓词方法。我认为转移一个整数值在这里获胜。

于 2013-01-15T10:09:15.477 回答
3

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

vm.VerifiedGroups = db.ReportGroups.Where(g => g.Verified).Count();
于 2013-01-15T10:06:09.440 回答