我想在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();