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

C# 使用linq将列表列表转换为单个列表,c#,linq,C#,Linq,我是一个具有相同类型对象的列表,我正在尝试使用linq将其转换为具有所有对象的单个列表 我该怎么做 这是我当前的代码: var allTrackAreas = _routables.Select( routable => _centrifugeHelper.GetTrackAreasFromRoutable(routable, _trackAreaCutterParameters,

我是一个具有相同类型对象的列表,我正在尝试使用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是一个列表列表,我在其中使用了两次,这对效率非常不利。如果是一个简单的列表就更好了。

您可以:

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

如果你有这样的清单

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);
  }
}
list test=newlist();
foreach(列表中的对象项)
{
foreach(项中的对象项)
{
测试。添加(项目);
}
}
然后在测试中你得到了所有六项记录


我希望这对您有所帮助。

我看到您也在做一个
Where(area=>area!=null)
。您也有空元素吗?如果有,我会更新我的答案。为什么你认为使用
Any
两次“对效率非常有害”?