2011-02-14 15 views
5

मैं इस कोडLINQ क्वेरी परिवर्तित सूची में <string>

List<string> IDs = new List<string>(); 
    XDocument doc = XDocument.Parse(xmlFile); 
    var query = from c in doc.Root.Elements("a").Elements("b") 
     select new { ID = c.Element("val").Value}; 

मैं कैसे क्वेरी पाश foreach के बिना सूची में कन्वर्ट कर सकते हैं?

{ ID = c.Element("val")} 

निश्चित रूप से तार कर रहे हैं

संपादित

मेरी एक्सएमएल फ़ाइल

<?xml version="1.0" encoding="utf-8"?> 
<aBase xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <a> 
    <b> 
     <val>other data</val> 
    </b> 
    <b> 

     <val>other data</val> 
    </b> 
    </a> 
</aBase> 

उत्तर

13
IDs = query.Select(a => a.ID).ToList(); 

या आप एक लाइन

में ऐसा करना चाहते हैं तो 210
List<string> IDs = (from c in doc.Root.Elements("a").Elements("b") 
     select c.Element("val").Value).ToList() 
+0

यह फेंकता मुझे [System.NullReferenceException]। क्यूं कर? – Saint

+0

@Saint_pl मैंने आपके द्वारा प्रदान किए गए एक्सएमएल का उपयोग किया और उस अपवाद को नहीं देखा। लेकिन मेरा अनुमान है कि आपके बी में से कोई एक वैल नहीं है। –

+0

ठीक है, यह बहुत अच्छा काम करता है। असली परियोजना में मेरे पास अन्य नाम हैं, और मैंने टाइपो (कोई इंटेलिजेंस नहीं किया;)) थैंक्स – Saint

4

गुमनाम प्रकार वास्तव में आपकी मदद नहीं कर रहा है क्योंकि आपको केवल तारों के अनुक्रम की आवश्यकता है, किसी भी प्रकार की टुपल नहीं। प्रयास करें:

XDocument doc = XDocument.Parse(xmlFile); 
var query = from c in doc.Root.Elements("a").Elements("b") 
      select c.Element("val").Value; 

var IDs = query.ToList(); 

व्यक्तिगत रूप से, मैं सिर्फ विधि-वाक्य रचना का प्रयोग करेंगे सभी तरह:

var IDs = doc.Root.Elements("a") 
        .Elements("b") 
        .Select(c => c.Element("val").Value) 
        .ToList(); 
संबंधित मुद्दे