Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ动态选择所有XML元素及其值_C#_Xml_Linq - Fatal编程技术网

C# 使用LINQ动态选择所有XML元素及其值

C# 使用LINQ动态选择所有XML元素及其值,c#,xml,linq,C#,Xml,Linq,但是,我有以下代码动态选择所有不同的元素名称;我还想查看这些元素的值。如何使用LINQ实现这一点?我也愿意用其他方式来做 XDocument doc = XDocument.Load("XMLFile1.xml"); foreach (var name in doc.Descendants("QueryResults").Elements() .Select(x => x.Name).Distinct()) { } 您只需使用name.Value,

但是,我有以下代码动态选择所有不同的元素名称;我还想查看这些元素的值。如何使用LINQ实现这一点?我也愿意用其他方式来做

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

您只需使用
name.Value
,它是
XElement

的一个字符串属性,类似这样的东西可以工作

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


   }

接受的查询与原始查询不同,因为它改变了
Distinct
的工作方式,因为它不再只比较
Name
,还比较
Value
。如果要查看哪些名称具有哪些值,则需要在
名称
上使用
GroupBy
,并获取每个项目的

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