我在编写LINQ查询以从XML获取某些节点时遇到问题,希望有人可以帮助它。 这是XML:
<EmpFieldsMap>
<Field>
<Name insert = "false">EmpNumber</Name>
</Field>
<Field>
<Name insert = "true">EmpName</Name>
</Field>
<Field>
<Name insert = "true">EmpLocation</Name>
</Field>
<Field>
<Name update = "false">EmpAddress1</Name>
</Field>
<Field>
<Name update = "false">EmpAddress2</Name>
</Field>
<Field>
</EmpFieldsMap>
正如您所看到的,Name
个标签中的某些insert
标签属于update
,其他标签属于insert
属性。
我需要获取不具有insert
属性且true
为InsertCollection
的标记。
意味着EmpName
应该有EmpLocation
,EmpAddress1
,EmpAddress2
和var titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
let insert = nameTag.Attribute("insert") ?? new XAttribute("insert","true")
where insert.Value == "true"
select nameTag.Element("Name").Value;
。
此代码:
Field
提供忽略Where
子句的所有五个{{1}}标记值。
我错过了什么?
答案 0 :(得分:3)
您应该知道,XAttribute
可以强制转换为bool
,并且会为数字(0/1)和文本(true / false)属性值返回正确的bool值。
我会试试这个:
titles = from nameTag in xml.Element("EmpFieldsMap").Elements("Field")
let insert = nameTag.Element("Name").Attribute("insert")
where insert == null || (bool)insert
select nameTag.Element("Name").Value;
你正试图获得Field元素的insert属性,这一直都不是。您应该检查nameTag.Element("Name").Attribute("insert")
或在第一行获取Name
元素。
答案 1 :(得分:1)
尝试这样
titles = (from nameTag in xml.Element("EmpFieldsMap").Elements("Field"))
.Where ( el=> (el.Attribute("insert").Value.Equals("true") ) ||
(el.Attribute("update").Value.Equals("false") )
Select(f => new
{
Text = nameTag.Element("Name").Value
});