2016-06-28 26 views
0

附加列的SelectMany我有一個類:LINQ方法如何從父類

public class Parent 
{ 
    public int ParentID { get; set; } 
    public string ParentName { get; set; } 
    public List<Child> Childs { get; set; } 
} 

public class Child 
{ 
    public int ChildID { get; set; } 
    public string ChildName { get; set; } 
} 

隨着Parent對象,這裏就是我得到的所有Childs值。

Parent obj = GetParent(); 
PrintExcel(obj.SelectMany(sm => sm.Childs); 

但是我也想在select命令中包含ParentName值,該如何實現?

使用SQL查詢,我能做到這一點

SELECT 
    p.ParentName, 
    c.ChildName 
FROM 
    Parent p 
    INNER JOIN Child c ON 
     p.ParentID = c.ParentID 
+0

變化PrintExcel'的'簽名把它:'PrintExcel(obj.ParentName, obj.SelectMany(sm => sm.Childs))' –

+0

我想在一個linq select中執行此操作,並且不能修改PrintExcel方法。 – warheat1990

+0

如果它不能被修改,你必須修改類「Child」來包含對其父項的引用。目前,「PrintExcel」方法採用「IEnumerable 」,它不知道「Parent」。 –

回答

2

你的LINQ的例子是有缺陷的。假設你有一個序列Parent(即IEnumerable<Parent>IQueryable<Parent>parents,您可以訪問SelectMany內部父至少在兩個方面:

(A)使用SelectSelectMany

parents.SelectMany(p => p.Childs.Select(c => new { p.ParentName, c.ChildName })) 

(B)使用SelectManyoverload允許傳遞結果選擇:

parents.SelectMany(p => p.Childs, (p, c) => new { p.ParentName, c.ChildName }) 

當然,你可以簡單地使用查詢語法,讓編譯器確定你正確的方法:

(from p in parents from c in p.Childs select new { p.ParentName, c.ChildName }) 
+0

作品!謝謝.. – warheat1990