LINQ对实体查询优化

本文关键字:查询优化 实体 LINQ | 更新日期: 2023-09-27 17:49:24

我目前有以下逻辑,它构建了一个包含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个总和。

任何想法?

LINQ对实体查询优化

你可以把你的逻辑包装成一个查询

totals.AddRange(entityContext.ItemVotes
    .Where(iv => iv.Vote >= 1 && iv.Vote <= 4)
    .GroupBy(iv => iv.Vote)
    .OrderBy(grp => grp.Key)
    .Select(grp => grp.Count());

(这段代码是未经测试的,可能是错误的,但只是抛出一个想法)

在LINQ中,. count()方法强制执行查询。如果你需要4个不同的总数,没有其他方法可以在一个报表中生成。