【问题标题】:linq query group by in a list of strings [duplicate]linq查询分组在字符串列表中[重复]
【发布时间】:2015-07-30 08:11:13
【问题描述】:

我对使用 c# 的 linq 查询非常陌生。我有一个字符串列表,我想获取一个新列表或删除所有双字符串。

List<string> zipcodes = new List<string>();
zipcodes.Add("1234");
zipcodes.Add("1234");
zipcodes.Add("1234");
zipcodes.Add("4321");
zipcodes.Add("4321");

List<string> groupbyzipcodes =
(from zip in zipcodes
group zip by zip into newgroup
select newgroup.ToList());

不能隐式转换类型 'System.collection.Generic.IEnumarable&lt;System.Collections.Generic.List&lt;string&gt;''System.collections.Generic.List&lt;string&gt;。显式转换 存在(您是否缺少演员表?)

【问题讨论】:

    标签: c# linq generics


    【解决方案1】:

    您也可以在 LINQ 中使用 distinct 关键字:

    var dedupedlist = zipcodes.Distinct().ToList();
    

    更多信息请见https://msdn.microsoft.com/en-us/library/vstudio/bb348436(v=vs.100).aspx

    【讨论】:

      【解决方案2】:

      这是删除重复值最有效的方法

      var groupbyzipcodes = new HashSet<string>(zipcodes);
      

      我已经讨论过这个问题(HashSet vs Distinct()here

      【讨论】:

      • 一个有趣的阅读:stackoverflow.com/questions/6298679/…
      • 有趣的是,我原以为 distinct 会以最有效的方式实现。个人觉得 distinct 可读性更强,不过还是要看应用的性能要求。
      【解决方案3】:

      为此目的有一个专用的 Linq 方法:

      var newList = zipCodes.Distinct().ToList();
      

      https://msdn.microsoft.com/en-us/library/vstudio/bb348436(v=vs.100).aspx

      【讨论】:

        【解决方案4】:

        如果你只有一个字符串列表,你可以使用 distinct()

        zipcodes.Distinct();
        

        它会给你列表的唯一值

        Rgds

        【讨论】:

          【解决方案5】:

          正如其他人所回答的那样 - 存在 Distinct 可以从 IEnumerable&lt;T&gt; 中获取不同的列表。

          您的具体问题是括号内有一个ToList(),它应该在外面。

          List<string> groupbyzipcodes =
          (from zip in zipcodes
          group zip by zip into newgroup
          select newgroup.ToList())
          

          应该是

          List<string> groupbyzipcodes =
          (from zip in zipcodes
          group zip by zip into newgroup
          select newgroup.Key).ToList();
          

          【讨论】:

          • 尝试运行这段代码,你会得到Cannot implicitly convert type 'System.Collections.Generic.List&lt;System.Linq.IGrouping&lt;string,string&gt;&gt;' to 'System.Collections.Generic.List&lt;string&gt;'。您需要执行 select newgroup.Key 才能使其正常工作。
          • @Chris - 谢谢,好地方。
          猜你喜欢
          • 2021-12-11
          • 2019-04-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-17
          相关资源
          最近更新 更多