2017-04-15 63 views
2
选择不同的项目

我的对象的结构是这样的两列的组合,并在第三列的值是MAX-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() 

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

回答

3

您可以根据您的列表项目,根据他们的ProductIdBidderUserId尝试一个小组,然后为每个小组挑选最高记录BidAmount。后者可以通过排序基于其BidAmount以降序组项目,然后挑选每个组的第一项来完成。

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

抛出这样 名为“玻璃钢”的局部变量不能在此范围内声明,因为它会给予不同的意义“GRP”,这已经是一个“父母或电流”范围用于错误表示别的 – Athul

+0

@Athul我的坏:(...对不起...我只是修正它请检查我的更新。 – Christos

相关问题