2013-07-17 48 views
2

我有一個表:Material(ID,Name,MAterialParentID)如何轉換SQL左連接查詢Linq到C#中的實體?

SELECT c1.ID,c1.Name as ParentName,c2.id,c2.Name 
FROM Material c1 Left JOIN Material c2 
ON  c1.ID = c2.MaterialParentID 

ID ParentName id Name 
1 Aluminium 2 Cavity 
1 Aluminium 3 Copper 
1 Aluminium 4 Flooring 
2 Cavity  NULL NULL 
3 Copper  NULL NULL 
4 Flooring NULL NULL 
5 Glass  NULL NULL 

我想使用的Liq到實體上述SQL Query轉換爲Linq Query

幫助讚賞!

+0

@Mthethew在導航屬性上使用'Include',而不是外鍵本身。 –

+0

是的,現在不幸編輯太晚了。 – Matthew

回答

1

如果表格僅用於閱讀,您可以簡單地創建一個視圖,然後在使用逆向工程時確保導入了視圖。

,或者如果你確實想在LINQ完成這件事這裏是MSDN例如

var innerJoinQuery = 
    from cust in customers 
    join dist in distributors on cust.City equals dist.City 
    select new { CustomerName = cust.Name, DistributorName = dist.Name }; 

這是你會怎樣看

var Material = from M in db.Materials 
         join M2 in db.Materials on M.ID equals M2.MaterialParentID 
         select new {ParentID = M.ID, ParentName = M.Name, M2.ID, M2.Name }; 

我編輯了我的職位上面,你可以看到我有包括ParentID以使所有列獨一無二

+0

hello @Luke Franklin,我在你的回答行中編輯了你的查詢並在我的程序中使用。但它顯示錯誤:「匿名類型無法在M2.ID中具有多個同名的屬性'!如何解決它?任何想法? –

+1

這是因爲您將獲得值的方式將是materials.id,並且將有2 id在m.id.的開頭寫入Parentid = m.id –

0

對於這種問題linqpad是你的朋友。

我建議是這樣的:

var materials = (from m in context.Material 
       let moreMaterials = (from m2 in context.Material where m2.id == m.id select m2).FirstOrDefault() 
       select m).ToList(); 

但是你可以用linqpad來定製您的查詢需求。