2008-12-05 18 views
7

का उपयोग कर रहा एक XML दस्तावेज इस के समान लग रही है साथ (विशेषता के आधार पर) अद्वितीय XElements का चयन करें:एक फिल्टर LinqToXml

<items> 
<item cat="1" owner="14">bla</item> 
<item cat="1" owner="9">bla</item> 
<item cat="1" owner="14">bla</item> 
<item cat="2" owner="12">bla</item> 
<item cat="2" owner="12">bla</item> 
</items> 

अब मैं सभी अद्वितीय मालिकों प्राप्त करना चाहते हैं (मैं वास्तव में केवल विशेषता मान की जरूरत है मालिक का) एक लिनक्स क्वेरी का उपयोग कर एक निर्दिष्ट श्रेणी से संबंधित है। मेरे उदाहरण में, बिल्ली 1 के लिए क्वेरी 9 और 14 वाली एक सूची लौटाएगी। मैं यह कैसे कर सकता हूं? लैंकदास पर लिंक वाक्यविन्यास को प्राथमिकता दी जाएगी। अग्रिम धन्यवाद;)

उत्तर

15

टुकड़ा यह मानकर itemsElement में है: स्वरूपण और इंडेंटेशन के लिए

var distinctOwners = (from item in itemsElement.Element("item") 
where itemElements.Attribute("cat") == 1 
select item.Attribute("owner")).Distinct(); 

क्षमा याचना!

+1

या में 'लैम्ब्डा' फॉर्म: itemElements .Where (x => x.Attribute ("बिल्ली") == 1) .Select (एक्स => एक्स। एट्रिब्यूट ("मालिक")) । डिस्टिंक(); व्यक्तिगत रूप से मैं इसे पसंद करता हूं! – Jennifer

+0

'itemElements' क्लॉज में 'आइटम' होना चाहिए। विशेषता विधि एक एक्सएट्रिब्यूट लौटाती है जिसे 1 के साथ तुलना नहीं की जा सकती है == को बिल्ली के लिए int और डिस्टिंट की आवश्यकता है = "2" अभी भी 2 आइटम लौटाएगी क्योंकि दोनों गुण प्रत्येक एक विशिष्ट वस्तु हैं। – AnthonyWJones

+1

... तो चमकदार वाक्यविन्यास त्रुटियों और xlinq ज्ञान की मेरी पूरी कमी के अलावा, मैं पैसे पर प्रतिस्पर्धात्मक हूं। आश्चर्य कीजिए कि क्या आपकी अपनी पोस्ट को कम करने का कोई तरीका है ... – Jennifer

2

इस समारोह का प्रयास करें: -

static IEnumerable<int> GetOwners(XDocument doc, string cat) 
{ 
    return from item in doc.Descendants("item") 
     where item.Attribute("cat").Value == cat 
     select (int)item.Attribute("owner")).Distinct(); 

} 
0
XElement ele = XElement.Parse(@"<items><item cat=""1"" owner=""14"">bla</item><item cat=""1"" owner=""9"">bla</item>" + 
           @"<item cat=""1"" owner=""14"">bla</item><item cat=""2"" owner=""12"">bla</item>" + 
           @"<item cat=""2"" owner=""12"">bla</item></items>"); 

    int cat = 1; 


    List<int> owners = ele.Elements("item") 
    .Where(x=>x.Attribute("cat").Value==cat.ToString()).Select(x=>Convert.ToInt32(x.Attribute("owner").Value)).Distinct().ToList(); 
संबंधित मुद्दे