将LINQ-to-Entities查询合并为一个查询

3
我有一个Entity Framework实体Provider,其中包含该提供者的评分投票列表。我的当前查询大致如下:
int previousVote = provider.ProviderRankings.FirstOrDefault(r => r.UserId == CurrUserId);
double averageVote = provider.ProviderRankings.Average(r => r.Rating);
int totalVotes = provider.ProviderRankings.Count();

这看起来在功能上是正确的。但我认为这将导致额外的三次数据库查询。有没有办法将这些请求合并为一个查询,以便只发送一个SQL查询,并且所有结果可以仅通过一次额外的服务器访问返回?

这三个查询是独立的查询。 - Sam Leach
1
@SamLeach:我知道它们是。这就是为什么我问是否有任何方法将它们合并成一次往返到服务器的原因。在纯SQL中,这是可能的。 - Jonathan Wood
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)
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接