2017-06-21 48 views
3

我有下面的代码动态选择所有不同的元素名称,但是;我也想看看这些元素的价值。我如何使用LINQ来做到这一点?我也愿意以其他方式做其他事情。使用LINQ动态选择所有的XML元素和它们的值

XDocument doc = XDocument.Load("XMLFile1.xml"); 
foreach (var name in doc.Descendants("QueryResults").Elements() 
       .Select(x => x.Name).Distinct()) 
{ 
} 

回答

1

像这样的工作

XDocument doc = XDocument.Load("XMLFile1.xml"); 
    foreach (var name in doc.Descendants("QueryResults").Elements() 
       .Select(x => new {Name = x.Name, Value = e.Value}).Distinct()) 
    { 


    } 
+0

这工作就像一个魅力。谢谢! –

0

你只想用name.Value,这是XElement一个字符串属性。

1

接受的查询是不同的充那么原来的一个,因为它改变了怎样Distinct作品,因为它不再仅仅比较NameValue。如果您想查看哪些名称具有哪些值,您需要在Name上使用GroupBy,并获取每个项目的Value

var results = 
    doc 
     .Descendants("QueryResults") 
     .Elements() 
     .GroupBy(x => x.Name, (name, items) => new 
     { 
      Name = name, 
      Values = items.Select(x => x.Value) 
     });