【问题标题】:Linq query convert to List<string>Linq 查询转换为 List<string>
【发布时间】:2011-06-27 06:25:16
【问题描述】:

我有这个代码

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")}

当然是字符串

编辑

我的 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>

【问题讨论】:

    标签: c# asp.net linq-to-xml type-conversion


    【解决方案1】:
    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_pl 我刚刚使用了您提供的 xml,没有看到该异常。但我猜你的一个 b 没有 val。
    • 好的,效果很好。在实际项目中,我有其他名字,我打错字(没有智能;))谢谢
    【解决方案2】:

    匿名类型并没有真正帮助您,因为您只需要一个 字符串 序列,而不是任何类型的元组。试试:

    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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-11
      • 1970-01-01
      • 2021-09-17
      • 1970-01-01
      相关资源
      最近更新 更多