Lar*_*i13 6 c# linq group-by greatest-n-per-group
我有一个我的对象列表:
class MyObj
{
public String Title { get; set; }
public Decimal Price { get; set; }
public String OtherData { get; set; }
}
var list = new List<MyObj> {
new MyObj { Title = "AAA", Price = 20, OtherData = "Z1" },
new MyObj { Title = "BBB", Price = 20, OtherData = "Z2" },
new MyObj { Title = "AAA", Price = 30, OtherData = "Z5" },
new MyObj { Title = "BBB", Price = 10, OtherData = "Z10" },
new MyObj { Title = "CCC", Price = 99, OtherData = "ZZ" }
};
Run Code Online (Sandbox Code Playgroud)
获得具有唯一Title和MAX(价格)的列表的最佳方法是什么.结果列表需要是:
var ret = new List<MyObj> {
new MyObj { Title = "BBB", Price = 20, OtherData = "Z2" },
new MyObj { Title = "AAA", Price = 30, OtherData = "Z5" },
new MyObj { Title = "CCC", Price = 99, OtherData = "ZZ" }
};
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 16
好吧,你可以这样做:
var query = list.GroupBy(x => x.Title)
.Select(group =>
{
decimal maxPrice = group.Max(x => x.Price);
return group.Where(x => x.Price == maxPrice)
.First();
};
Run Code Online (Sandbox Code Playgroud)
如果你需要LINQ to SQL(你不能使用语句lambdas),你可以使用:
var query = list.GroupBy(x => x.Title)
.Select(group => group.Where(x => x.Price == group.Max(y => y.Price))
.First());
Run Code Online (Sandbox Code Playgroud)
请注意,在每次迭代中效率较低的LINQ to Objects中Where
,它会重新计算最大价格.
.First()
如果您希望能够返回具有给定名称的多个项目(如果它们具有相同的价格),则调整该部分.
在LINQ to Objects中你也可以使用MoreLINQ的MaxBy
方法:
var query = list.GroupBy(x => x.Title)
.Select(group => group.MaxBy(x => x.Price));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8533 次 |
最近记录: |