Sorun: tüm kayıtları döndürme where
Jon Doe
=<bus_contact>
VEYA<bus_sponsor>
.XML sorgulanırken LINQ'da OR koşulu nasıl eklenir?
Geçerli kod, kayıt 1'i döndürür; bu nedenle, yalnızca bir sorgu kullanarak kayıtları 1 ve 2 döndürmek için hangi değişikliklerin yapılması gerekir?
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();
}
}
Düzenleme: Bu tam olası yinelenen linkte belirttiği gibi aynı sorun değildir. Evet, kısmi olarak buna atıfta bulunur, fakat yeni başlayan bir kişi, kabul edilen yanıtın sağladığı uygun içerikle bir cevap almak olarak oldukça faydalıdır. Böyle Any
birlikte
Olası yinelenen
Element
yöntemini kullanarak her türlü (bus_contact
,bus_sponsor
, vs.) Eğer tüm sorguyu kolaylaştırabilirsiniz sadece bir alt öğesi öğesi varsa linq] (http://stackoverflow.com/questions/2059488/multiple-descendants-types-linq) –