Linq只包含最大行

本文关键字:包含最 Linq | 更新日期: 2023-09-27 18:21:28

我正在从一个表中提取包含另一个表的项。包含时,包含的表中可能有多行属于该项,但我只想包含包含列最大值的行。

items.AddRange(db.AuctionItems
    .Include(f => f.AuctionBids.Max().Bid)
    .OrderBy(x => x.Item));

也尝试过

items.AddRange(db.AuctionItems
    .Include(f => f.AuctionBids.Max(y => y.Bid))
    .OrderBy(x => x.Item));

错误

The Include path expression must refer to a navigation property defined on the type. Use dotted paths for reference navigation properties and the Select operator for collection navigation properties.

添加信息

表拍卖项目

ID
Name
.....

表拍卖出价

ID
ItemID
Bid
....

因此,我想提取所有项目,并只包括包含该项目最高出价的行。

Linq只包含最大行

您可以执行以下操作:

db.AuctionItems
  .Select(s => new{ai = s, bid = s.AuctionBids.OrderByDescending(o => o.Bid).FirstOrDefault()})
  .AsEnumerable()
  .Select(s => s.ai)

使用这种方法,您只需将所需的AuctionBid加载到上下文中,EF将为您映射到适当的AuctionItem