我有一个列表,其中我使用linQ:
应用以下条件我想选择Name包含某个字符串的所有项目。
Entry
最后,有时碰巧我有一个重复名字的列表:
例如:
var nameFilter = result
.Where(e => e.Name.Contains(requestedValue))
.ToList();
我最终得到了:
requestedValue = 'form';
我两次Name Price
transformer 100
transformer 20
formation 340
former 201
。在这种情况下,我只想让变压器保持最低价格:transformer
如何在没有循环的情况下使用linQ执行此操作?
答案 0 :(得分:2)
您可以利用GroupBy
方法
var nameFilter = result.Where(e => e.Name.Contains(requestedValue))
.GroupBy(k=>k.Name, g=>g.Price, (k,g)=>new Model {Name = k, Price = g.Min()})
.ToList();
其中new Model
应更改为您的班级名称。
如果你有更多属性可以返回,那么
会更方便 var nameFilter = result.Where(e => e.Name.Contains(requestedValue))
.GroupBy(k => k.Name, g => g, (k, g) =>
{
var minPrice = g.Min(x => x.Price);
return g.First(x => x.Price == minPrice);
}).ToList();
查找minPrice
并找到包含minPrice
的项目可以是单个for循环,或者,例如,通过使用以下讨论here