OrderBy和ThenBy结合嵌套的Where?

时间:2017-10-11 12:41:53

标签: .net linq

我有一个对象列表,每个对象都包含不同的其他对象列表,如下所示:

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实现所需的结果?

1 个答案:

答案 0 :(得分:2)

使用...DescendingMax

var mostExpensivePurchase =  purchaseList
    .OrderByDescending(p => p.Items
        .Where(pItem => pItem.ArticleNo == "numberImLookingFor")
        .Max(pItem => pItem.Price))
    .ThenByDescending(p => p.Date)
    .FirstOrDefault()