2015-12-14 43 views
1

是否可以使用Lambda表达式来返回自定义类的列表中的一个字段(ProgramQuantity)的最小值以及该类中的另一个字段(Program Price)?如果是这样,它会是什么样子?可能从最小Lambda表达式返回两个字段?

decimal listMinQty = 0; 
    List<PriceLevel> TrackPrice = new List<PriceLevel>(); 

     // add data to list here ... 

     listMinQty = TrackPrice.Min(c => c.ProgramQuantity);// CAN I RETURN more than ProgramQuantity? 

    } 
      public class PriceLevel 
    { 
     public decimal ProgramPrice   { get; set; } 
     public int ProgramQuantity   { get; set; } 
     public DateTime ProgramLastTime  { get; set; }// Last Order Time 
    } 
+0

在你的具体的例子,你可以通过ProgramQuantity降序排列,并用'.Take'返回前3个结果。你需要它比一般吗?'TrackPrice.OrderByDescending(c => c.ProgramQuantity).Take(3)' –

+0

目前你的问题还不清楚。如果您希望具有最小“ProgramQuanity”值的项目需要专门说明,那么如果多于一个项目具有相同的“ProgramQuantity”最小值,则需要告诉我们如何中断潜在关系。 – juharr

+0

我的错误。已更正 – Greg

回答

1

如果你想找到您获得Min的项目,你可以做这样的:

var minItem = TrackPrice.OrderBy(c => c.ProgramQuantity).First(); 

现在您可以minItem.ProgramQuantityminItem.ProgramPrice

你也可以使用MinBy扩展,以避免排序:

var minItem = TrackPrice.MinBy(c => c.ProgramQuantity); 
var minQty = minItem.ProgramQuantity; 
var priceOfMin = minItem.ProgramPrice; 
+0

是否可以使用minItem.ProgramPrice&minItem.ProgramQuantity更新列表,例如:minItem.ProgramPrice = loopLastPrice; – Greg

+1

@Greg因为'PriceLevel'是一个可变的'class',所以答案是“是”。但是,请注意,如果'PriceLevel'是'struct',则不可能。 – dasblinkenlight

+0

这就是我正在寻找的。谢谢大家 – Greg