我目前有以下逻辑可构建4个整数的列表,其中每个整数代表某个项目ID(1、2、3或4)的所有票的总和:
List<int> totals = new List<int>();
using (RepositoryEntities entityContext = new RepositoryEntities())
{
totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 1));
totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 2));
totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 3));
totals.Add(entityContext.ItemVotes.Count(v => v.Vote == 4));
}
这很好,但是我在质疑这种查询的效率,因为这似乎实际上会生成并执行4个单独的查询。理想情况下,我希望有一个有效的查询,该查询可以向我返回4个和。
有任何想法吗?
提前致谢。
最佳答案
您可以将逻辑包装到一个查询中
totals.AddRange(entityContext.ItemVotes
.Where(iv => iv.Vote >= 1 && iv.Vote <= 4)
.GroupBy(iv => iv.Vote)
.OrderBy(grp => grp.Key)
.Select(grp => grp.Count());
(此代码未经测试,可能不合时宜,只是抛出了一个主意)