2015-12-14 130 views
4

最大的值對象的名單,我希望我可以解釋我的情況不夠好一些幫助。搜索按日期

基本上我有一個列表(ITEMLIST)由ItemRows的如下

ItemRows 
     public string ItemId { get; set; } 
     public string ItemDate { get; set; } 
     public string ItemPrice { get; set; } 

目前我在foreach循環,來遍歷當前變量在每次迭代中另一功能。但是,當我通過價格時,我只想要通過每個ItemDate的最高價格。

foreach item in ItemList 
{ 
    AnotherFunction(ItemId, ItemDate, MaxPriceByDate); 
} 

所以,如果我有以下4行的數據....

123, 01/01/2015, $15 
234, 01/01/2015, $20 
345, 01/02/2015, $10 
456, 01/02/2015, $5 

這裏是我想要的循環傳遞信息一起:

first iteration: 123, 01/01/2015, $20 
second iteration: 234, 01/01/2015, $20 
third iteration: 345, 01/02/2015, $10 
fourth iteration: 456, 01/02/2015, $10 

基本上我我正在尋求如何從我的列表中選擇foreach循環使用的美元數量的幫助,但我只希望它從每次迭代的列表中選擇最高數量的日期。

我希望這是有道理的,我感謝您的幫助!

+1

您需要的if else塊 – Haris

+0

你爲什麼不通過'item'成'AnotherFunction',而不是自己指定的所有值。另外您提供將不編譯由於缺少大括號的代碼,請正確地顯示它 – TheLethalCoder

+0

據數據從平面文件來了,但我可能能夠與數據的導入工作。不是一個壞主意,我會稍微處理它。 – Gazrok

回答

3
foreach(var item in ItemList) 
{ 
    AnotherFunction(item.ItemId, item.ItemDate, ItemList.Where(x => x.ItemDate == item.ItemDate) 
                 .OrderByDesc(z => Convert.ToInt32(z.ItemPrice.Replace("$", ""))) 
                       .First().ItemPrice); 
} 
+0

根據我的答案和其他一些'ItemPrice'變量是一個字符串,因此可能需要轉換爲一個int – TheLethalCoder

+0

這個建議對我來說最合適在我的情況下!非常感謝! – Gazrok

4

您可能會被ItemDate財產要組這不同的方式處理了一下。例如。

var grouped = (from r in rows 
       group r by r.ItemDate into g 
       select new { Date = g.Key, MaxPrice = g.Max(gg=>gg.ItemPrice) 
       Items = g}) 

這將使你在那裏每個元素有一個日期,MaxPrice該日期和屬於該日期的項目的結構。通過循環中的一些小修改,您可以將其應用到當前結構中。

編輯:作爲另一個答案注意,你可能需要在價格轉換爲某種數字格式,如果它在字符串或同樣的事情與日期屬性。我建議在進入這個邏輯之前將字符串轉換爲日期和數字。

+0

看到我的答案爲邏輯轉換爲一個int,如果需要 – TheLethalCoder

3

如果所有你問的是MaxPricePerDate你可以使用下面的LINQ功能:

int nMaxPrice = ItemList.Where(i => i.ItemDate == item.ItemDate 
         .Max(i => Convert.ToInt32(i.ItemPrice)); 

此外,如果字符串中包含$符號,這將需要先剝去像i.ItemPrice.Replace("$", "");

需要調用Convert將字符串轉換爲int,但它很危險,因爲如果字符串格式不正確,可能會拋出異常。也可考慮尋找到Int32.TryParse();

0

您可以使用Linq找到了最大的價格爲當前數據。這可能不是最有效的方式,但它的工作:

foreach(var item in itemList) 
    { 
     Console.WriteLine("{0} {1} {2}", item.ItemId, item.ItemDate, itemList.Where(i => i.ItemDate == item.ItemDate).Max(d => d.ItemPrice)); 
    } 
+0

這與我的答案類似,但請注意'ItemPrice'是一個字符串,不是int,因此需要轉換。 – TheLethalCoder

+0

你剛纔幾秒鐘就在你身邊:-) –

+0

我知道我沒有抱怨複製:) – TheLethalCoder