C# 基于XML的Linq查询以选择子节点的多个元素
我想从下面的xml中选择child的所有不同值C# 基于XML的Linq查询以选择子节点的多个元素,c#,xml,linq,C#,Xml,Linq,我想从下面的xml中选择child的所有不同值 <root> <parent> <child>value 1</child> <child>value 2</child> </parent> <parent> <child>value 1</child> <child>value 4</child> <
<root>
<parent>
<child>value 1</child>
<child>value 2</child>
</parent>
<parent>
<child>value 1</child>
<child>value 4</child>
</parent>
</root>
但无法从中获取值,将值包装在标记中,且不区分
是否可以显示两种获取方法-查询和链接aka lambda。是的,两种方法都可以
var doc = new XDocument("your xml string");
var values = (from c in doc.Root.Descendants("child") select c.Value).Distinct();
//链式
var values = doc.Root.Descendants("child").Select(c=>c.Value).Distinct();
是的,两种方法都有可能
var doc = new XDocument("your xml string");
var values = (from c in doc.Root.Descendants("child") select c.Value).Distinct();
//链式
var values = doc.Root.Descendants("child").Select(c=>c.Value).Distinct();
您正在选择元素,并且元素都是不同的。您需要获得不同的值。例如:
var values = XmlResources.Element("root")
.Elements("parent")
.Elements("child")
.Select(x => x.Value)
.Distinct();
在这里使用查询表达式真的没有什么好处——它只会增加粗糙度。我仅在查询具有多个方面(例如where和有意义的select或join)时使用查询表达式。仅仅是一个选择,或者只是一个毫无意义的地方。因此,您可以使用:
var values = (from x in XmlResources.Element("root")
.Elements("parent")
.Elements("child")
select x.Value).Distinct();
var values = XmlResources.Descendants("child")
.Select(x => x.Value)
.Distinct();
。。。但你为什么要这么做?在国际海事组织看来,这不太清楚
请注意,如果您不太关心根/父/子层次结构,并且很乐意只获取所有的子
子体,则可以使用:
var values = (from x in XmlResources.Element("root")
.Elements("parent")
.Elements("child")
select x.Value).Distinct();
var values = XmlResources.Descendants("child")
.Select(x => x.Value)
.Distinct();
您正在选择元素,并且元素都是不同的。您需要获得不同的值。例如:
var values = XmlResources.Element("root")
.Elements("parent")
.Elements("child")
.Select(x => x.Value)
.Distinct();
在这里使用查询表达式真的没有什么好处——它只会增加粗糙度。我仅在查询具有多个方面(例如where和有意义的select或join)时使用查询表达式。仅仅是一个选择,或者只是一个毫无意义的地方。因此,您可以使用:
var values = (from x in XmlResources.Element("root")
.Elements("parent")
.Elements("child")
select x.Value).Distinct();
var values = XmlResources.Descendants("child")
.Select(x => x.Value)
.Distinct();
。。。但你为什么要这么做?在国际海事组织看来,这不太清楚
请注意,如果您不太关心根/父/子层次结构,并且很乐意只获取所有的子
子体,则可以使用:
var values = (from x in XmlResources.Element("root")
.Elements("parent")
.Elements("child")
select x.Value).Distinct();
var values = XmlResources.Descendants("child")
.Select(x => x.Value)
.Distinct();
太棒了,谢谢!我没有意识到我可以直接转到child,而是试图通过元素(“根”)链接到它。元素(“父”)为什么要使用语句体lambda,而仅仅
。选择(c=>c.Value)
会更简单?另外请注意,它是Select
,而不是Select
(我已经将Select
编辑为Select
,并且还修复了子体的名称和字符串文本……我想你不会介意。我暂时将lambda表达式保留在笨拙的语法中,以防你真的需要它。)太棒了,谢谢!我没有意识到我可以直接转到child,而是试图通过元素(“根”)链接到它。元素(“父”)为什么要使用语句体lambda,而仅仅。选择(c=>c.Value)
会更简单?另外请注意,它是Select
,而不是Select
(我已经将Select
编辑为Select
,并且还修复了子体的名称和字符串文本……我想你不会介意。我暂时将lambda表达式保留在笨拙的语法中,以防你真的需要它。)谢谢,我会考虑到这一点,只是想学习用查询方式做事。@SergejPopov:学习用适合上下文的方式做事-不要强迫自己在查询表达式对你没有帮助时使用它。这就像当你可以直接调用某个东西时,强迫自己使用反射……谢谢,我们会考虑到这一点,只是想学习以查询的方式做事。@SergejPopov:学习以适合上下文的方式做事-当查询表达式对你没有帮助时,不要强迫自己使用它。这就像当你可以直接调用某些东西时,强迫自己使用反射。。。