3

我有一个 Entity Framework entity Provider,其中包含该提供者的评分投票列表。我当前的查询如下所示:

int previousVote = provider.ProviderRankings.FirstOrDefault(r => r.UserId == CurrUserId);
double averageVote = provider.ProviderRankings.Average(r => r.Rating);
int totalVotes = provider.ProviderRankings.Count();

这在功能上似乎是正确的。但是,我相信这会导致另外三趟数据库访问。有没有办法将这些请求合并到一个查询中,以便只发送一个 SQL 查询,并且只需一次额外的服务器访问就可以返回所有结果?

4

1 回答 1

4

您可以使用 Group By 轻松组合这两个聚合:

单个 Linq-to-Entities 查询中的多个 SQL 聚合函数

如果您为分组选择适当的模糊键(例如键 = 0),我很确定 FirstOrDefault 将起作用,即:

from t in ProviderRankings
  group t by key = 0
  into g
  select new {
     previousVote  = g.FirstOrDefault(r => r.UserId == CurrUserId),
     totalVotes = g.Count(),
     averageVote = g.Average(x => x.Rating)
  }
于 2013-05-29T01:56:20.510 回答