2008-09-19 12 views
12

इस स्थिति में मैं LINQ से XML और LINQ से SQL का उपयोग कर किसी XML फ़ाइल से डेटा आयात करने का प्रयास कर रहा हूं।एंटिटीसेट <t> पर आप IENumerable <t> या IQueryable <t> कैसे डालें?

public struct Page 
{ 
    public string Name; 
    public char Status; 
    public EntitySet<PageContent> PageContents; 

} 
public struct PageContent 
{ 
    public string Content; 
    public string Username; 
    public DateTime DateTime; 
} 

असल में मैं क्या करने की कोशिश कर रहा हूँ एक प्रश्न मुझे एक डेटा संरचना है कि मैं सिर्फ अपनी LINQ डाटा प्रसंग को प्रस्तुत कर सकते हैं दे देंगे कि लिखना है:

यहाँ मेरी LINQ डेटा मॉडल है।

IEnumerable<Page> pages = from el in doc.Descendants() 
          where el.Name.LocalName == "page" 
          select new Page() 
       { 
        Name = el.Elements().Where(e => e.Name.LocalName == "title").First().Value, 
        Status = 'N', 
        PageContents = (from pc in el.Elements() 
            where pc.Name.LocalName == "revision" 
            select new PageContent() 
            { 
             Content = pc.Elements().Where(e => e.Name.LocalName=="text").First().Value, 
             Username = pc.Elements().Where(e => e.Name.LocalName == "contributor").First().Elements().Where(e => e.Name.LocalName == "username").First().Value, 
             DateTime = DateTime.Parse(pc.Elements().Where(e => e.Name.LocalName == "timestamp").First().Value) 
            }).ToList() 
       }; 

समस्या उप-क्वेरी में है। मुझे किसी भी तरह से एंटीटीसेट कंटेनर में अपना ऑब्जेक्ट संग्रह प्राप्त करना होगा। मैं इसे नहीं डाल सकता (हे भगवान, मैंने कोशिश की है) और कोई एंटिटीसेट() कन्स्ट्रक्टर नहीं है जो मददगार प्रतीत होता है।

तो, मैं एक LINQ क्वेरी कि मेरे IEnumerable < पृष्ठ > डेटा के साथ EntitySet <PageContent> डेटा से स्थापित हो जाएगा लिख ​​सकता है?

उत्तर

25

आप की तरह एक सहायक वर्ग, कुछ का उपयोग कर एक IEnumerable से अपने इकाई सेट का निर्माण कर सकते हैं:

public static class EntityCollectionHelper 
{ 
    public static EntitySet<T> ToEntitySet<T>(this IEnumerable<T> source) where T:class 
    { 
     EntitySet<T> set = new EntitySet<T>(); 
     set.AddRange(source); 
     return set; 
    } 
} 

और इतने की तरह उपयोग:

PageContents = (from pc in el.Elements() 
           where pc.Name.LocalName == "revision" 
           select new PageContent() 
           { 
            Content = pc.Elements().Where(e => e.Name.LocalName=="text").First().Value, 
            Username = pc.Elements().Where(e => e.Name.LocalName == "contributor").First().Elements().Where(e => e.Name.LocalName == "username").First().Value, 
            DateTime = DateTime.Parse(pc.Elements().Where(e => e.Name.LocalName == "timestamp").First().Value) 
           }).ToEntitySet() 
+0

प्रतिभाशाली, धन्यवाद संभोग! –

+3

इच्छा है कि मैं आपको एक दर्जन बार उठा सकता हूं - बस इस समस्या पर मेरे पहियों को घुमाएं। न केवल आपने मुझे आगे बढ़ने में मदद की है, लेकिन आपने अपनी आंखों को विस्तार विधियों की पूरी अवधारणा में खोला है - बहुत अच्छा। –

+0

क्या आप समझ सकते हैं कि मुझे सार्वजनिक स्थैतिक वर्ग EntityCollectionHelper को कैसे कार्यान्वित करना है (डीओटी)} के अंतर्गत काम करने के लिए)। ToEntitySet(), कृपया? धन्यवाद! –

संबंधित मुद्दे