我为我的应用程序创建了以下对象模型
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&#34; SystemName&#34;从对象节点列表到字符串列表
我已经尝试过以下查询,但仍然没有预料到。
var test = Object.Nodes.ToList<Node>()
.Select(x => x.InstrumentData?.MySysDataList.ToList<MySysData>()
.Select(y => y.SystemName)
.ToList()) ;
答案 0 :(得分:2)
您需要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();
如果您想在最终Distict
之前删除ToList
之前的重复项。
答案 1 :(得分:0)
如果您只想要系统名称,那么因为您的内部选择返回一个列表(所以最终输出是一个列表列表),您需要使用SelectMany
来“压扁”列表。只要事情可以枚举,您也不需要一直重复使用ToList()
。我认为这样的事情应该有效:
var test = Object.Nodes
.SelectMany(x => x.InstrumentData?.MySysDataList.Select(y => y.SystemName))
.ToList();