2015-12-14 204 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