2013-07-17 88 views
1

,我發現了以下錯誤:C#中的LINQ to XML錯誤:無法隱式轉換類型

不能鍵入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"); 

回答

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()藏漢,這取決於你想如何嚴格的回報是。

2

你需要在你的上線改變.Where.SingleOrDefault

2

.Where()將返回IEnumerable即使中只有一個項目。如果您希望只返回一件商品,您可以致電.First().FirstOrDefault()可數枚舉

2

你需要告訴LINQ你只需要1個節點

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