【问题标题】:LINQ: How to find most popular item from columnLINQ:如何从列中找到最受欢迎的项目
【发布时间】:2022-01-22 10:41:20
【问题描述】:

我想通过 'ItemTitle' 列在我的 Orders 表中查找最受欢迎的商品。

ItemTitle 有以下内容:

  • 国王汉堡
  • 夏威夷人
  • 意大利经典
  • 提拉米苏
  • 国王汉堡
  • 国王汉堡
  • 意大利经典
  • 意大利经典
  • 国王汉堡

查找最受欢迎的项目的最佳 LINQ 查询是什么?谢谢!

这是我的尝试:

 return _DbContext.Orders.GroupBy(x => x.ItemTitle).Where(g => g.Count() > 1).OrderByDescending(g => g.Count()).Select(g => g.Key).Take(1);

它可以工作,但是它有一个错误。错误是 Orders 有 Quantity 列。 前任: 在下面的列表中有 4 King Burger's x 1 - 数量。 如果提拉米苏有 x 10 - 数量,那么现在最受欢迎的应该是提拉米苏。

【问题讨论】:

  • 您能否提供您为自己制作解决方案所做的尝试?此外,考虑如何找到解决方案(除了语义)可能会有所帮助 - 例如,将标​​题组合在一起以查找它出现的次数并返回
  • 我的方法可以用 for 循环来完成。不幸的是,我对 LINQ 没有太多经验。我最常使用 Where、Select、FirstOrDefault、Count、Max、Average 和 Include

标签: asp.net .net asp.net-mvc


【解决方案1】:

如果你不关心领带,那么你可以使用这个:

var query =
    orders
        .GroupBy(x => x.ItemTitle, x => x.Quantity)
        .Select(x => new { ItemTitle = x.Key, Quantity = x.Sum() })
        .OrderByDescending(x => x.Quantity)
        .Take(1)
        .SingleOrDefault();

否则,如果跟踪关系很重要,那么这很有效:

var querySupportingTies =
    orders
        .GroupBy(x => x.ItemTitle, x => x.Quantity)
        .Select(x => new { ItemTitle = x.Key, Quantity = x.Sum() })
        .ToLookup(x => x.Quantity, x => x.ItemTitle)
        .OrderByDescending(x => x.Key)
        .Select(x => new
        {
            Quantity = x.Key,
            ItemTitles = x.ToArray()
        })
        .Take(1)
        .SingleOrDefault();

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 2010-09-20
    • 2012-03-24
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    相关资源
    最近更新 更多