我的对象结构就像这样
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();
现在我想从这个列表中选择BiddedUserId
和ProductId
的组合唯一的所有行,如果有多行满足这个条件,我想只选择最高的行列BidAmount
中的值如何实现此目的?
我试过这样做,首先将项目分为两列,然后取最大值,代码就像这样
productsInThisFairs.DistinctBy(x=>new {x.ProductId,x.BiddedUserId }).ToList()
但是我知道这只会返回列表中的那两列,所有其他列都将被丢弃。任何人都可以指出实现这一目标的正确方法是什么?
答案 0 :(得分:3)
您可以根据列表项ProductId
和BidderUserId
尝试使用列表项,然后为每个组选择最高BidAmount
的记录。后者可以通过根据BidAmount
按降序排序组项目,然后选择每个组的第一项来完成。
var result = productsInThisFairs.GroupBy(prd=>new { prd.ProductId, prd.BiddedUserId})
.Select(grp => grp.OrderByDescending(item=>item.BidAmount)
.FirstOrDefault());