【问题标题】:Keep distinct value in List depending on condition根据条件在列表中保留不同的值
【发布时间】:2018-05-21 15:21:22
【问题描述】:

我有一个列表,我在其中使用 linQ 应用以下条件:

我想选择名称中包含特定字符串的所有项目。

var nameFilter = result
                     .Where(e => e.Name.Contains(requestedValue))
                     .ToList();

最后,有时我会遇到一个重复名称的列表:

例如:

requestedValue = 'form';

我最终得到:

Name           Price
transformer    100
transformer    20 
formation      340
former         201

我收到了两次transformer。在这种情况下,我只想以 最低价格 离开变压器:20

如何在不循环的情况下使用 linQ 做到这一点?

【问题讨论】:

  • 您的数据看起来可能在字典而不是列表结构中
  • @mikaelmendoza21 我的列表有更多的属性,我只是把这些来展示我想要的。

标签: c# linq


【解决方案1】:

你可以利用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

【讨论】:

    猜你喜欢
    • 2015-02-17
    • 1970-01-01
    • 2020-01-15
    • 2022-11-20
    • 2020-01-12
    • 2018-06-10
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多