1

我收到以下错误:

无法将 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");
4

4 回答 4

2

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

var userNode = siteUserData.Descendants("User")
  .FirstOrDefault(n => n.Attribute("ID").Value.Equals("12"));
于 2013-07-17T16:10:12.777 回答
2

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

于 2013-07-17T16:08:27.973 回答
2

利用

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(),具体取决于您希望退货的严格程度。

于 2013-07-17T16:08:36.190 回答
2

您需要.Where在最后一行更改为.SingleOrDefault

于 2013-07-17T16:08:06.750 回答