使用linq将列表列表转换为单个列表

时间:2014-08-05 07:43:43

标签: c# linq

我是具有相同类型对象的列表列表,我正在尝试使用linq将其转换为包含所有对象的单个列表。

我该怎么做?

这是我目前的代码:

  var allTrackAreas =
            _routables.Select(
                routable =>
                    _centrifugeHelper.GetTrackAreasFromRoutable(routable, _trackAreaCutterParameters,
                        _allowedDestination.MatchedAreas[routable]))
                .Where(area => area != null).ToList();

        foreach (var testAction in _trackAreaCutterParameters.ConcurrentBagTestActions)
        {
            if (allTrackAreas.Any(areas => areas.Any(area => area.Id == testAction.TrackAreaId)))
            {
                currentActions.Add(testAction);
            }
        }

变量allTrackAreas是一个列表列表,我在它上面使用了两次Any,这对效率来说非常糟糕。如果它是一个简单的列表会好得多。

2 个答案:

答案 0 :(得分:13)

你可以这样做:

var allTrackAreasCombined = allTrackAreas.SelectMany(t => t).ToList();

答案 1 :(得分:0)

如果你有这样的清单

list[0]
      Records1[0]
      Records2[1]
      Records3[2]
list[1]
      Records1[0]
      Records2[1]
      Records3[2]

所以你可以像使用这段代码一样在单个列表中创建所有记录

list<object> test = new list<object>();
foreach(object items in list)
{
  foreach(object item in items)
  {
     test.add(item);
  }
}

然后在测试中你得到了所有六个记录。

我希望这对你有所帮助。