0

我在编写 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属性并具有insertas的标签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

我错过了什么?

4

2 回答 2

3

您应该知道,它XAttribute可以转换bool为数字 (0/1) 和文本 (true/false) 属性值,并将返回正确的布尔值。

我会试试这个:

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 元素的插入属性,这一直都没有。您应该在第一行检查nameTag.Element("Name").Attribute("insert")或获取元素。Name

于 2013-02-20T06:53:51.220 回答
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
             });
于 2013-02-20T06:57:57.960 回答