簡體   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