2010-08-13 21 views
5

2 टेबल (दस्तावेज़ और DocumentClass) कि निम्न स्तंभ है है की एक सूची वापस करने के लिए:LINQ और विशिष्ट प्रकार

DocumentClass: DocClassID, नाम, ParentID

दस्तावेज़: DocID, नाम, DocClassID

DocumentClass तालिका में माता-पिता और बच्चे के रिकॉर्ड होते हैं और माता-पिता और बच्चे के बीच संबंध माता-पिता कॉलम होता है। Document रिकॉर्ड DocClassID विदेशी कुंजी द्वारा DocumentClass में एक बच्चे के रिकॉर्ड से जुड़ा हुआ है।

DocumentClass में

जनक रिकॉर्ड ParentID किया है ParentID = 0 और DocumentClass में बाल रिकॉर्ड! = 0

मैं DocumentClass मेज से एक बच्चे की नाम और है कि बच्चे की माता का नाम प्राप्त करना चाहते हैं।

मैंने एक ऐसा फ़ंक्शन बनाने में कामयाब रहा है जो मेरे लिए ऐसा करता है। मैं दस्तावेज़ आईडी की एक सूची में भेजता हूं, उन DocumentClass रिकॉर्ड्स (बाल अभिलेख) को ढूंढता हूं जो दस्तावेज से जुड़ा हुआ है और फिर माता-पिता को उन बच्चों के रिकॉर्ड में ढूंढें। तब मैंने वह जानकारी दी जिसे मैं बाल वर्ग में चाहता हूं।

public List<Child> GetDocClassInfo(List<int> docIds) 
{ 
var result = from dc in _context.DocClasses 
      from d in _context.Documents 
      where dc.DocClassID == d.DocClassID 
      where dc.DocClassID != 0 
      where docIds.Contains(d.DocID) 
      select new 
      { 
       children = from p in _context.DocClasses 
          where dc.ParentID == p.DocClassID 
          select new Child 
          { 
           ChildId = dc.DocClassID, 
           ChildDocClassName = dc.DocClassName, 
           ParentId = p.DocClassID, 
           ParentDocClassName = p.DocClassName 
          } 
      }; 

     return result.ToList(); 
    } 

मेरी समस्या यह है कि मैं फ़ंक्शन से वापस लौटने की सूची चाहता हूं, लेकिन संकलक इसे बिल्कुल पसंद नहीं करता है। मैं कह रही है कि

परोक्ष System.Collection.Generic.List<Child> के प्रकार System.Collections.Generic.List``<AnonymousType#1> कनवर्ट नहीं कर सकता कोई त्रुटि मिलती है।

मैं सूची को वापस करने के लिए LINQ क्वेरी कैसे लिख सकता हूं?

सादर,

OKB

+0

नहीं करना चाहिए यह शायद के रूप में चिह्नित किया जा आप यहाँ SelectMany उपयोग करने के लिए सक्षम होना चाहिए ....... ठीक है मैं इसे करूँगा – mpen

उत्तर

2
var result = (from dc in _context.DocClasses 
      join d in _context.Documents 
      on dc.DocClassID equals d.DocClassID 
      where dc.DocClassID != 0 && docIds.Contains(d.DocID) 
      let children = from p in _context.DocClasses 
          where dc.ParentID == p.DocClassID 
          select new Child { 
               ChildId = dc.DocClassID, 
               ChildDocClassName = dc.DocClassName, 
               ParentId = p.DocClassID, 
               ParentDocClassName = p.DocClassName 
               } 
       select children).SelectMany(c=>c).ToList(); 
+0

आपके त्वरित उत्तर के लिए धन्यवाद! – OKB

6

result एक, प्रत्येक एक सदस्य (children) कि Child अभिलेखों का एक गणनीय सेट है के साथ अनाम प्रकार की सूची है।

var list = (from item in result 
      from child in item.children 
      select child).ToList(); 

या (समान):

var list = result.SelectMany(item => item.children).ToList(); 
3

आपको गुमनाम प्रकार लौट रहे हैं जब आप कहते हैं select new { children ...

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