2017-04-15 86 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

相關問題