根据条件在List中保持不同的值

时间:2018-05-21 15:21:22

标签: c# linq

我有一个列表,其中我使用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执行此操作?

1 个答案:

答案 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