问题:返回所有记录where
Jon Doe
=<bus_contact>
OR <bus_sponsor>
。
当前代码返回记录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 ();
}
}
编辑:这与可能重复的链接中指出的问题不完全相同。是的,它部分地指的是,但是作为初学者,使用公认的答案提供的具有适当上下文的答案非常有帮助。
用||
结合Any
,就像这样:
var results = main.Descendants("row")
.Where(r =>
r.Descendants("bus_contact").Any(c => c.Value == "Jon Doe")
|| r.Descendants("bus_sponsor").Any(c => c.Value == "Jon Doe")
);
使用Any
,您可以按条件查询孩子,而无需实际下降到孩子级别。这样就消除了选择爬回树的必要性Parent
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句