问题:返回所有记录where
Jon Doe
=<bus_contact>
或<bus_sponsor>
。如何在查询XML时在LINQ中添加OR条件?
当前代码返回记录1,因此需要进行哪些修改才能使用一个查询返回记录1和2?
XML
<root>
<row>
<project_id>1</project_id>
<project_name>Name1</project_name>
<bus_contact>Jon Doe</bus_contact>
<bus_sponsor>Bruce Wayne</bus_sponsor>
</row>
<row>
<project_id>2</project_id>
<project_name>Name2</project_name>
<bus_contact>Peter Parker</bus_contact>
<bus_sponsor>Jon Doe</bus_sponsor>
</row>
</root>
C#
class Program
{
static void Main (string[] args)
{
XElement main = XElement.Load ("master_list.xml");
var results = main.Descendants ("row")
.Descendants ("bus_contact")
.Where (e => e.Value == "Jon Doe")
.Select (e => e.Parent)
.Select (e => new {
project_id = e.Descendants ("project_id").FirstOrDefault().Value,
project_name = e.Descendants ("project_name").FirstOrDefault().Value
});
foreach (var result in results)
Console.WriteLine ("{0}, {1}", result.project_id, result.project_name);
Console.ReadLine();
}
}
编辑:这不正是为可能的重复链接指出了同样的问题。是的,它部分地提到了这一点,但作为一个初学者,通过适当的上下文来获得答案,这是接受的答案提供的,是相当有帮助的。
[多个子孙类型的可能的复制有各种(
bus_contact
,bus_sponsor
等),可以简化整个查询的唯一一个子元素项目linq](http://stackoverflow.com/questions/2059488/multiple-descendants-types-linq) –