【问题标题】:c# linq to xml error: cannot implicitly convert typec# linq to xml 错误:无法隐式转换类型
【发布时间】:2013-07-17 16:06:08
【问题描述】:

我收到以下错误:

无法将 System.Collections.Generic.IEnumerable 类型隐式转换为 System.Xml.Linq.XElement。存在显式转换(您是否缺少演员表?)

我有一个类似于以下内容的 XML 文件:

<Users xmlns="http://schemas.microsoft.com/sharepoint/soap/directory/"> 
<User ID="91" Name="Jane Smith" LoginName="domain1\jsmith" />
<User ID="814" Name="Brad Jones" LoginName="domain1\bjones" />
<User ID="1252" Name="Charles Johnson" LoginName="domain2\cjohnson" />
</Users>

我想选择具有特定 ID 的节点。这是我的代码(Where 子句给出了错误):

XmlNode siteUsers = tempug.GetUserCollectionFromSite();
string innerXML = siteUsers.InnerXml;
XDocument siteUserData = XDocument.Parse(innerXML);
XElement userNode = siteUserData.Descendants("User")
  .Where(n => n.Attribute("ID").Value.Equals("12");

【问题讨论】:

    标签: c# xml linq


    【解决方案1】:

    使用

    XElement userNode = siteUserData.Descendants("User")
      .Where(n => n.Attribute("ID").Value.Equals("12").FirstOrDefault();
    

    或

    XElement userNode = siteUserData.Descendants("User")
      .Where(n => n.Attribute("ID").Value.Equals("12").SingleOrDefault();
    

    您也可以使用Single() 和First(),具体取决于您希望退货的严格程度。

    【讨论】:

      【解决方案2】:

      您需要将最后一行中的.Where 更改为.SingleOrDefault

      【讨论】:

        【解决方案3】:

        你需要告诉 linq 你只想要 1 个节点

        var userNode = siteUserData.Descendants("User")
          .FirstOrDefault(n => n.Attribute("ID").Value.Equals("12"));
        

        【讨论】:

          【解决方案4】:

          .Where() 将返回 IEnumerable,即使其中只有一项。如果您希望只退回一件商品,您可以在 Enumerable 上致电 .First() 或 .FirstOrDefault()。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-08-04
            • 2014-02-12
            • 2014-04-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多