LINQ to XML 使用 Lambda 语法填充对象集合

LINQ to XML using Lambda syntax to populate object collection

我正在尝试使用带有 lambda 语法的 LINQ 从 XML 片段加载对象列表,但在创建新对象时我遇到了 lambda 语法问题。

这是将保存数据的自定义 class:

public class PhysicianInfoModel
{
  string FirstName;
  string LastName;
  string Degree;
}

这是示例 XML 我正在尝试从以下位置加载对象集合:

<response>
  <control>
    <status>success</status>
    <dtdversion>3.0</dtdversion>
  </control>
  <operation>
    <authentication>
      <status>success</status>
      <userid>jsmith</userid>
    </authentication>
    <result>
      <status>success</status>
      <physicianlist>
        <physician>
          <lastname degree="MD">Smith</lastname>
          <firstname>Paul</firstname>
        </physician>
        <physician>
          <lastname degree="DO">Smith</lastname>
          <firstname>Paul</firstname>
        </physician>
      </physicianlist>
    </result>
  </operation>
</response>

我试过使用如下代码,但我知道它是不正确的,因为甚至 Visual Studio 中的 intellisense 都在运行 "red squiggly line"。在此示例中,xml 是一个 XDocument 对象,它已加载上面列出的 XML。

List<PhysicianInfoModel> nodeList = xml.Descendants("physicianlist")
                                .Descendants("physician")
                                .Select(x => new PhysicianInfoModel()
                                {
                                  FirstName = x.?????,
                                  LastName = x.????,
                                  Degree = x.Attribute("degree") // Not working
                                });

xSelect() 的上下文中引用了单个 physician 元素,因此您无法直接从 x 获取 degree 属性。您需要先获取子 lastname 元素:

List<PhysicianInfoModel> nodeList = 
            xml.Descendants("physicianlist")
               .Descendants("physician")
               .Select(x => new PhysicianInfoModel()
               {
                   FirstName = (string)x.Element("firstname"),
                   LastName = (string)x.Element("lastname"),
                   Degree = (string)x.Element("lastname").Attribute("degree")
               })
               .ToList();

此外,所有 "red squiggly line" 都是 可能 因为 3 个字段的可见性是 privatedefault visibility) so it won't be accessible from outside of the class PhysicianInfoModel,虽然我不确定是否是这种情况,因为您没有 post 实际的错误消息。