c# - LINQ to Entity 查询优化

标签 c# linq entity-framework entity-framework-4

我目前有以下逻辑来构建 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());

(此代码未经测试,可能偏离基础,但只是抛出一个想法)

关于c# - LINQ to Entity 查询优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5600792/

相关文章:

c# - 如何在静态基方法中创建继承的实例?

c# - 索引超出数组范围 - 整数

c# - 为什么 "Covariance"和 "Contravariance"的概念在实现接口(interface)的方法时适用?

c# - EF 多个不同版本的数据库

c# - DbContext/Ninject Dependency GetService Slow SingleOrDefault 在负载测试下

c# - 在继承类中隐藏/重载辅助方法时基类方法的行为

c# - LINQ - 返回非空对象的属性值

c# - AsNoTracking 方法在 linq 语句中抛出错误

c# - Linq To 实体,在左连接之前在表上使用 where 子句

c# - C# Entity Framework 中Where 子句和foreach 查找的区别