【问题标题】:Linq to avoid nested foreach loop to get unique valuesLinq 避免嵌套 foreach 循环以获取唯一值
【发布时间】:2015-12-26 16:39:19
【问题描述】:

我有以下查询,但它有 2 个我认为不好的 foreach 循环。如何使用 linq 从 IEnumerable> 对象中获取不同的值。

下面是我写的代码,

var floatingIds= subInfo.Ranges.Select(c => c.RangeIDs.Select(s=>s)).Distinct();
 var floatIds= new List<Guid>();
                foreach (var ids in floatingIds)
                    foreach (var id in ids)
                    {
                        if (!floatIds.Contains(id))
                        {
                            floatIds.Add(id);
                        }
                    }

我有这篇文章,但仍然没有得到预期值,但上面的代码给出了正确的 ID How do I avoid using nested foreach statements by using lambda or linq in this scenario?

【问题讨论】:

  • 让“你可以使用SelectMany”的答案开始...
  • @IvanStoev:是的.. 涉及 LINQ 的答案应该解释相关的运算符(在这种情况下为 SelectMany( )),而不仅仅是显示其用途。
  • 朋友,您可能会发现stackoverflow.com/questions/958949/… 和youtube.com/watch?v=9tgz3aVNblM 很有用。这个想法是使列表列表成为列表
  • 实际上是错误的,我使用 selectmany 编写的内容有效,原因是我传递了错误的值集。总之谢谢
  • @displayname 你是正确的

标签: c# linq foreach


【解决方案1】:

您可以使用SelectMany 来展平集合并在没有任何foreach 的情况下获取所有不同的值:

var floatIds = subInfo.Ranges
    .SelectMany(c => c.RangeIDs.Select(s=>s))
    .Distinct()
    .ToList();

【讨论】:

    【解决方案2】:
    var floatIds = subInfo.Ranges
        .SelectMany(c => c.RangeIDs.Select(s=>s))
        .Distinct()
        .ToList();
    

    【讨论】:

      猜你喜欢
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-25
      • 2023-03-17
      • 1970-01-01
      • 2017-08-27
      • 2017-11-11
      相关资源
      最近更新 更多