我想提取一個嵌套對象的不同可能值(名稱,類型)的列表。 如何從下列嵌套集合中獲取屬性名稱及其各自類型的列表?Linq獲取嵌套元素的不同值
的數據結構在C#:
Nodes (List<Node>)
- Node1:
-Properties (List<NodeProperty>) getter: Node1.Properties
-Property1:
-Name: "AAA" (string) getter Property1.Name
-Type: "string" (string) getter Property1.Type
實施例:
MyNodes:
Node1:
Properties
Property1:
Name: "AAA"
Type: "string"
Property2:
Name: "BBB"
Type: "int"
Node2:
Properties
Property1:
Name: "CCC"
Type: "double"
Property2:
Name: "DDD"
Type: "double"
結果
List<KeyValuePair<string, string>> result;
// content of result after the Linq magic:
// AAA -> string
// BBB -> int
// CCC -> double
// DDD -> double
如何可以使用LINQ提取此? 提取的不同的名稱制定出這樣的:
List<string> names = MyNodes.SelectMany(n => n.Properties.Select(np => np.Name)).Distinct().ToList();
// res: [AAA, BBB, CCC, DDD]
這是一個良好的開端?
有沒有一個單一的Linq查詢解決方案呢?
編輯
最小測試類和數據:
public class Node{
public List<NodeProperty> Properties;
}
public class NodeProperty
{
public string Name;
public string Type;
}
var MyNodes = new List<Node>
{
new Node {
Properties = new List<NodeProperty>
{
new NodeProperty {Name = "node1", Type="string"},
new NodeProperty {Name = "node2", Type="int"},
}
},
new Node {
Properties = new List<NodeProperty>
{
new NodeProperty {Name = "node3", Type="string"},
new NodeProperty {Name = "node4", Type="int"},
}
},
new Node {
Properties = new List<NodeProperty>
{
new NodeProperty {Name = "node1", Type="string"},
new NodeProperty {Name = "node2", Type="int"},
}
}
};
能否請您提供您的數據作爲有效的C#代碼?這樣我們就可以複製粘貼並運行。 – Enigmativity
添加了一些示例數據和類。 – DDan
示例代碼看起來很熟悉:)提供的答案有問題嗎? – AndrewP