[英]Return min value in group with lambda/linq query
我需要幫助創建一個lambda表達式來查詢以下列表,以便檢索每個通道中價格最低的項目。 即,對於該示例項目A,D和G.
class Radio
{
public string Name { get; set; }
public int Channel { get; set; }
public decimal Price { get; set; }
}
List<Radio> radios = new List<Radio>();
radios.Add(new Radio() { Name = "A", Channel = 1, Price = 10 });
radios.Add(new Radio() { Name = "B", Channel = 1, Price = 20 });
radios.Add(new Radio() { Name = "C", Channel = 1, Price = 30 });
radios.Add(new Radio() { Name = "D", Channel = 2, Price = 10 });
radios.Add(new Radio() { Name = "E", Channel = 2, Price = 20 });
radios.Add(new Radio() { Name = "F", Channel = 2, Price = 30 });
radios.Add(new Radio() { Name = "G", Channel = 3, Price = 10 });
radios.Add(new Radio() { Name = "H", Channel = 3, Price = 20 });
radios.Add(new Radio() { Name = "I", Channel = 3, Price = 30 });
使用Linq,
第一組使用Enumerable.GroupBy
然后使用Enumerable.OrderBy進行排序
然后采取首先在組中的每個分類項
radios.GroupBy(x=> x.Channel).Select(x=>x.OrderBy(y=>y.Price)).Select(x=>x.First());
您也可以在不對每個組進行昂貴的排序的情況下執行此操作:
radios.GroupBy(x => x.Channel).Select(g =>
g.Aggregate((r1, r2) => r1.Price < r2.Price ? r1 : r2));
Aggregate
遍歷每個組一次,跟蹤到目前為止發現的最便宜的無線電,如果找到更便宜的無線電,則替換它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.