LINQ to Entity 查询优化

发布于 2024-10-31 09:58:12 字数 583 浏览 1 评论 0原文

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

有什么想法吗?
提前致谢。

I currently have the following logic that builds a list of 4 integers, where each integer represents a sum of all votes for a certain item ID (1, 2, 3 or 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));
}

This works very well, but I'm questioning the efficiency of such querying, because this seems to actually generate and execute 4 separate queries. Ideally I'd want to have a single, efficient query that returns me the 4 sums.

Any ideas?
Thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

您可以将逻辑包装到一个查询中

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

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

You could wrap your logic into one query

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

(This code is untested and could be way off base but just throwing out an idea)

韶华倾负 2024-11-07 09:58:12

在 LINQ 中,.Count() 方法强制执行查询。如果您需要 4 个不同的总计,则没有其他方法可以在一个语句中生成该总计。

in LINQ the .Count() method forces execution of a query. If you need 4 different totals there is no other way to produce that in one statement.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文