我想使用LINQ獲取不同值的字典。 我一直在使用這種嘗試:使用LINQ的不同字典
var roleRefList =
xDocument.Root.Descendants()
.Where(x => x.Name.LocalName.Equals("roleRef") &&
!string.IsNullOrEmpty(Convert.ToString(x.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")))) &&
!string.IsNullOrEmpty(Convert.ToString(x.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href")))))
.Select(l => new {
roleUri = l.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")).Value,
href = l.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href")).Value
})
.Distinct()
.ToDictionary(a => a.roleUri);
的這裏的問題是,當有在roleUri
重複項,然後會出現錯誤。 我解析XML文檔並創建xElement屬性的字典roleUri
和roleref
(如果它們存在於xElement中)。
其他的解決方法是使用一個for循環:
Dictionary<string, string> roleRefList = new Dictionary<string, string>();
foreach (XElement element in xDocument.Root.Descendants().Where(x => x.Name.LocalName.Equals("roleRef")))
{
string roelUri = Convert.ToString(element.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("roleURI")));
string href = Convert.ToString(element.Attributes().FirstOrDefault(a => a.Name.LocalName.Equals("href")));
if (!string.IsNullOrEmpty(roelUri) && !string.IsNullOrEmpty(href) && !roleRefList.ContainsKey(roelUri))
{
roleRefList.Add(roelUri, href);
}
}
,但我想實現這個使用LINQ。
爲什麼要使用Linq實現此功能?如果您有工作代碼? – Maarten 2013-03-14 06:53:42
使用節點本地名稱的原因是什麼?你的XML有不同的名稱空間聲明?你能展示你正在解析的xml的例子嗎? – 2013-03-14 07:07:23
所以根據你的循環:如果'roleUri'不止一次存在,你只需要它的第一個實例(和它的'roleRef')在Dictionary中?我有這個權利嗎? – Merenzo 2013-03-14 07:10:02