将 Linq 查询转换为 List<string>

5
我有这段代码。
List<string> IDs = new List<string>();
    XDocument doc = XDocument.Parse(xmlFile);
    var query = from c in doc.Root.Elements("a").Elements("b")
        select new { ID = c.Element("val").Value};

如何在不使用foreach循环的情况下将查询转换为列表?
{ ID = c.Element("val")}

当然,字符串是指IT技术中的一种数据类型。

编辑

我的XML文件

<?xml version="1.0" encoding="utf-8"?>
<aBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <a>
    <b>
      <val>other data</val>
    </b>
    <b>

      <val>other data</val>
    </b>
  </a>
</aBase>
2个回答

13
IDs = query.Select(a  => a.ID).ToList();

或者如果你想在一行中完成

List<string> IDs = (from c in doc.Root.Elements("a").Elements("b")
        select c.Element("val").Value).ToList()

它抛出了[System.NullReferenceException]异常。为什么? - Saint
@Saint_pl 我刚刚使用了您提供的 XML,没有看到那个异常。但我猜测您的 b 中有一个没有 val。 - Yuriy Faktorovich
好的,它运行得很好。在实际项目中,我有其他的名称,并且我打了错字(没有智能感知 ;) )谢谢 - Saint

4
匿名类型并不能帮助你,因为你只需要一个字符串序列,而不是任何一种元组。尝试使用以下代码:
XDocument doc = XDocument.Parse(xmlFile);
var query = from c in doc.Root.Elements("a").Elements("b")
            select c.Element("val").Value;

var IDs = query.ToList();

个人而言,我会一直使用方法语法:


var IDs = doc.Root.Elements("a")
                  .Elements("b")
                  .Select(c => c.Element("val").Value)
                  .ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接