समस्या: सभी रिकॉर्ड where
Jon Doe
=<bus_contact>
या<bus_sponsor>
लौटाएं।एक्सएमएल पूछताछ करते समय LINQ में या शर्त कैसे जोड़ें?
वर्तमान कोड रिकॉर्ड 1 देता है, तो केवल एक प्रश्न का उपयोग कर रिकॉर्ड 1 और 2 को वापस करने के लिए क्या संशोधन की आवश्यकता है?
एक्सएमएल
<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>
सी #
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();
}
}
संपादित: यह वास्तव में एक ही समस्या के रूप में संभव डुप्लिकेट लिंक में बताया नहीं है। हां, यह आंशिक रूप से उस संदर्भ को संदर्भित करता है लेकिन एक शुरुआत के रूप में उपयुक्त संदर्भ के साथ एक उत्तर प्राप्त करने के रूप में, जो स्वीकार किया गया उत्तर प्रदान करता है, काफी उपयोगी है। संयोजन में
[एकाधिक वंश प्रकार के संभावित डुप्लिकेट के बजाय
Element
विधि का उपयोग कर प्रत्येक प्रकार (bus_contact
,bus_sponsor
, आदि) आप पूरे क्वेरी को आसान बना सकता का केवल एक ही subelement आइटम है linq] (http://stackoverflow.com/questions/2059488/multiple-descendants-types-linq) –