【问题标题】:Get a new result from a List从列表中获取新结果
【发布时间】:2013-08-07 20:04:08
【问题描述】:

我有一个详细的列表,我想要一个新的列表,其中包含一个属性的元素,并且没有这样的重复。

List<Class1> list = List<Class1>();
list.Add(new Class1("1", "Walmart", 13.54));
list.Add(new Class1("2", "Target", 12.54));
list.Add(new Class1("3", "Walmart", 14.54));
list.Add(new Class1("4", "BestBuy", 16.54));
list.Add(new Class1("5", "Walmart", 19.54));
list.Add(new Class1("6", "Amazon", 12.33));

我的新列表

List<Stores> newList = list.Select / FindAll / Group ?

我想要这个收藏

newList = "Walmart", "Target", "BestBuy", "Amazon"

【问题讨论】:

标签: c# linq list no-duplicates


【解决方案1】:

您需要DistinctSelect

var newList = list.Select(x => x.Name).Distinct().ToList();

如果你还想要你原来的课程,你就必须变得更花哨。

获取MoreLINQ 并使用其DistinctBy 方法:

var newList = list.DistinctBy(x => x.Name).ToList();

或者使用聪明的GroupBy hack:

var newList = list.GroupBy(x => x.Name).Select(x => x.First());

【讨论】:

    【解决方案2】:

    假设 Class1 定义为:

    public class Class1
    {
        string Id {get;set;}
        string Store {get;set;}
        double Price {get;set;}
    }
    

    你的结果可以是:

    var result = list.Select(x => x.Store).Distinct().ToList();
    

    【讨论】:

      【解决方案3】:

      您想使用Select() 选择项目的特定属性:

      list.Select(c => c.Company);
      

      这会返回一个IEnumerable&lt;string&gt;

      然后你会想打电话给.Distinct()

      【讨论】:

        【解决方案4】:
        newList = list.Select(x => x.Store).Distinct().ToList();
        

        【讨论】:

        • 嗯。这似乎是另一个答案的精确副本。
        • @It'sNotALie。所有 4 个答案都有相同的确切代码 sn-p;一个显而易见的答案就是这么简单的问题。
        • @Servy 当然,但我没想到完全相同的 lambda 参数名称 字段的名称可以区分。
        • @It'sNotALie。四分之三的参数名称相同,而且列表名称不够独特,以至于两个人自己想出它会让我感到惊讶。
        • @It'sNotALie。哦,它也是问题本身用来保存结果的列表的名称,所以我猜他们是否都从那里复制了它。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-15
        • 2021-06-26
        • 1970-01-01
        • 1970-01-01
        • 2018-02-24
        • 2013-05-06
        • 2014-10-15
        相关资源
        最近更新 更多