LINQ:如何从专栏中找到最受欢迎的项目



我想在Orders表中查找'ItemTitle'列中最受欢迎的项目。

ItemTitle包含以下内容:

  • 王汉堡
  • 夏威夷语
  • Classico Italiano
  • 提拉米苏
  • 特大号汉堡
  • 特大号汉堡
  • Classico Italiano
  • Classico Italiano
  • 特大号汉堡

查找哪一项最受欢迎的最佳LINQ查询是什么?非常感谢。

这是我的尝试:

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

它正在工作,但是,它有一个错误。错误是订单有数量列。例如:在下面的列表中有4个汉堡王x 1-数量。如果提拉米苏的数量是10,那么现在最受欢迎的应该是提拉米苏。

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

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();

最新更新