繁体   English   中英

Linq从自定义嵌套对象列表中选择项目列表

[英]Linq to select list of items from custom nested list of objects

我为我的应用程序创建了以下对象模型

public class Object
{
    public List<Node> Nodes { get; set; }
}

public class Node
{
    public InstrumentData InstrumentData { get; set; }        
}

public class InstrumentData
{       
    public List<MySysData> MySysDataList { get; set; }
}

public class MySysData
{       
    public string SystemName { get; set; }        
}

现在我有节点的对象列表。 我想从对象节点列表中选择not null“SystemName”到字符串列表
我已经尝试过以下查询,但仍然没有预料到。

 var test = Object.Nodes.ToList<Node>()
  .Select(x => x.InstrumentData?.MySysDataList.ToList<MySysData>()
  .Select(y => y.SystemName)
  .ToList()) ;

你需要WhereSelectMany

List<string> sysNameList = Object.Nodes
   .Where(x => x.InstrumentData?.MySysDataList != null)
   .SelectMany(x => x.InstrumentData.MySysDataList
       .Select(y => y.SystemName)
       .Where(sName => sName != null))
   .ToList();

如果要在最终ToList之前删除重复项前置Distict

如果你真的只想要系统名称,那么因为你的内部选择返回一个列表(所以最终的输出是一个列表列表),你需要使用SelectMany来“展平”列表。 只要事物是可枚举的,您也不需要一直重复使用ToList() 我认为这样的事情应该有效:

var test = Object.Nodes
    .SelectMany(x => x.InstrumentData?.MySysDataList.Select(y => y.SystemName))
    .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM