2010-08-13 71 views
5

我有2個表(文件和的DocumentClass)具有下列列的列表:LINQ以及如何返回一個特定類型的

的DocumentClass:DocClassID,名稱,PARENTID

文件:的DocID,名稱, DocClassID

DocumentClass表包含父級和子級記錄,並且父級和子級之間的關係是ParentID列。 Document記錄通過DocClassID外鍵與DocumentClass中的子記錄鏈接。

DocumentClass父記錄有PARENTID = 0,並在DocumentClass兒童記錄都PARENTID!= 0

我想從DocumentClass表中檢索一個孩子的姓名和孩子的父母姓名。

我已經設法創建一個功能,爲我做。我發送文檔ID列表,找到那些與文檔關聯的DocumentClass記錄(子記錄),然後找到這些子記錄的父代。然後我把我想要的信息放入一個Child類。

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(); 
    } 

我的問題是,我想要從函數返回一個List,但編譯器根本不喜歡這個。我得到一個錯誤,說

不能將類型System.Collections.Generic.List``<AnonymousType#1>隱式轉換爲System.Collection.Generic.List<Child>

如何編寫該LINQ查詢以返回List?

此致

OKB

+0

不應該這個也許被標記爲您返回一個匿名類型.......罰款我會去做 – mpen 2010-08-13 06:47:39

回答

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 2010-08-16 05:28:29

6

result是匿名類型的列表,每一個部件(children),其可枚舉組Child記錄。您應該能夠使用的SelectMany這裏:

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 ...

相關問題