[英]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()) ;
你需要Where
和SelectMany
:
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.