我有一个对象列表,每个对象都包含不同的其他对象列表,如下所示:
Purchase (Date, Customer)
- Item (Article No. , Price)
- Item (Article No. , Price)
Purchase (Date, Customer)
- Item (Article No. , Price)
- Item (Article No. , Price)
我现在想要运行一个查询来查找物品1的最高价格购买,如果存在多个具有相同价格的购买,我想要最新的一个。
我已经尝试了
myList
.OrderBy(p => p.Items
.Where(i => i.ArticleNo == "numberImLookingFor")
.Select(x => x.Price))
.ThenBy(p => p.Date)
.LastOrDefault()
但我收到一个参数异常"至少有一个对象必须实现icomparable"。我认为这是因为OrderBy实现了某种延迟排序,并且嵌套的where子句妨碍了它。
如何使用Linq实现所需的结果?
答案 0 :(得分:2)
使用...Descending
和Max
:
var mostExpensivePurchase = purchaseList
.OrderByDescending(p => p.Items
.Where(pItem => pItem.ArticleNo == "numberImLookingFor")
.Max(pItem => pItem.Price))
.ThenByDescending(p => p.Date)
.FirstOrDefault()