我想使用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