将LINQ到实体查询组合成单个查询

时间:2013-05-28 23:26:12

标签: c# sql linq 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查询,并且只返回一次服务器返回所有结果?

1 个答案:

答案 0 :(得分:4)

您可以使用Group By:

轻松地合并这两个聚合

Multiple SQL aggregate functions in a single Linq-to-Entities query

如果您为分组选择一个适当模糊的密钥(例如key = 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)
  }