我有一个实体框架实体Provider
,其中包含该提供商的评级投票列表。我当前的查询看起来像这样:
int previousVote = provider.ProviderRankings.FirstOrDefault(r => r.UserId == CurrUserId);
double averageVote = provider.ProviderRankings.Average(r => r.Rating);
int totalVotes = provider.ProviderRankings.Count();
这似乎在功能上是正确的。但是,我相信这将导致另外三次访问数据库。有没有将这些请求合并到一个查询中,这样只发送一个SQL查询,并且只返回一次服务器返回所有结果?
答案 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)
}