Linq避免嵌套的foreach循环来获取唯一值

时间:2015-12-26 16:39:20

标签: c# linq foreach

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

以下是我写的代码,

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?

2 个答案:

答案 0 :(得分:1)

您可以使用SelectMany展平集合并获取所有不同的值而不使用任何foreach

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

答案 1 :(得分:-1)

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