Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
将多个xml元素值添加到列表中_Xml_Linq - Fatal编程技术网

将多个xml元素值添加到列表中

将多个xml元素值添加到列表中,xml,linq,Xml,Linq,下面的代码可以工作,但我希望实现相同的结果,即通过一个查询将元素“triptype”和“description”的不同值插入到列表中。任何帮助都将不胜感激 提前感谢,, 马塞洛 类程序 { 静态void Main(字符串[]参数) { 字符串xml=@“ 假期 巴哈马之行 89 假期 加州之旅 75 商业 芝加哥之旅 82 "; 列表行程=新列表(); XDocument xdoc=XDocument.Parse(xml); var tripTypes=(从xdoc.subjects(“Trip

下面的代码可以工作,但我希望实现相同的结果,即通过一个查询将元素“triptype”和“description”的不同值插入到列表中。任何帮助都将不胜感激

提前感谢,, 马塞洛

类程序
{
静态void Main(字符串[]参数)
{
字符串xml=@“
假期
巴哈马之行
89
假期
加州之旅
75
商业
芝加哥之旅
82
";
列表行程=新列表();
XDocument xdoc=XDocument.Parse(xml);
var tripTypes=(从xdoc.subjects(“Trip”)中的t开始)
.元素(“triptype”)
选择t.Value).Distinct();
foreach(tripTypes中的变量tripType)
{
trips.Add(tripType);
}
var tripDescriptions=(来自xdoc.subjects(“Trip”)中的t)
.要素(“说明”)
选择t.Value).Distinct();
foreach(tripDescriptions中的变量tripDescription)
{
trips.Add(tripDescription);
}
Console.ReadLine();
}
}

AFAIK,当您试图使用不同的值实现时,无法使用单个LINQ to XML查询选择多个元素

但是,您可以使用每个元素的值将序列投影到一个匿名类型中,然后找到不同的值,但我怀疑这可能会比您现在所做的更为繁琐和难以理解,即

var query = xdoc.Root.Elements( "Trip" )
        .Select( x => new
                      {
                              trip = x.Element( "triptype" ).Value,
                              desc = x.Element( "description" ).Value
                      } ).ToList();

trips.AddRange( query.Select( x => x.trip ).Union( query.Select( x => x.desc ) ).Distinct() );
相反,我建议通过使用而不是
foreach
循环进行轻微的清理,并使用与您现在使用的相同的逻辑,为每个需要的节点获取每个不同的值集:

var q1 = xdoc.Descendants( "triptype" ).Select( x => x.Value ).Distinct();
var q2 = xdoc.Descendants( "description" ).Select( x => x.Value ).Distinct();
trips.AddRange( q1.Union( q2 ) );

伟大的您是对的,使用List.AddRange是一个更干净的解决方案。这正是我想要的。非常感谢你!
var q1 = xdoc.Descendants( "triptype" ).Select( x => x.Value ).Distinct();
var q2 = xdoc.Descendants( "description" ).Select( x => x.Value ).Distinct();
trips.AddRange( q1.Union( q2 ) );