通过两列的组合选择不同的项目,其中第三列的值为max- LINQ

时间:2017-04-15 06:36:08

标签: c# mysql sql-server linq

我的对象结构就像这样

public class ProductToBids
{

    public int BidAmount { get; set; }
    public DateTime? BidDate { get; set; }
    public int BiddedUserId { get; set; }
    public string BidderEmail { get; set; }
    public string bidderName { get; set; }
    public int BidStatus { get; set; }
    public int FairId { get; set; }
    public string ProductDescription { get; set; }
    public int ProductId { get; set; }
    public string ProductName { get; set; }
}

我有一个像这样的对象列表

List<ProductToBids> productsInThisFairs = new List<ProductToBids>();
productsInThisFairs = FillData();

现在我想从这个列表中选择BiddedUserIdProductId的组合唯一的所有行,如果有多行满足这个条件,我想只选择最高的行列BidAmount中的值如何实现此目的? 我试过这样做,首先将项目分为两列,然后取最大值,代码就像这样

productsInThisFairs.DistinctBy(x=>new {x.ProductId,x.BiddedUserId }).ToList()

但是我知道这只会返回列表中的那两列,所有其他列都将被丢弃。任何人都可以指出实现这一目标的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

您可以根据列表项ProductIdBidderUserId尝试使用列表项,然后为每个组选择最高BidAmount的记录。后者可以通过根据BidAmount按降序排序组项目,然后选择每个组的第一项来完成。

var result = productsInThisFairs.GroupBy(prd=>new { prd.ProductId, prd.BiddedUserId})
                                .Select(grp => grp.OrderByDescending(item=>item.BidAmount)
                                                  .FirstOrDefault());