2011-06-09 33 views
1

當您正在編寫一個涉及兩個表/實體的linq查詢時,您已經在實體框架數據模型中定義了它們之間的關係,您是否必須在查詢中定義連接或者是否存在使用已定義關係的不同語法?Linq到兩個表的實體

var q = 

    from c in categories 

    join p in products on c equals p.Category into ps 

    select new { Category = c, Products = ps }; 

否則在EF模型中定義關係有什麼意義?

回答

2

如果一切設置正確,你將有一個代表外鍵關係的參考屬性,在這種情況下,你應該能夠做這樣的事情:

var q = from c in categories 
     select new {Category = c, Products = c.Products}; 
+0

我有我的兩個實體之間的導航屬性設置,但關係是1> 0..1,當我試圖寫任何類型的涉及這兩個linq查詢它是拋出一條錯誤消息,說:「類型推斷失敗打電話給'SelectMany'「。我是否在做錯誤的事情,閱讀有人建議使用實體引用的錯誤,但我不知道這是否屬實? – suggy1982 2011-06-10 22:07:44

+0

@ suggy1982你可以在你的問題中發佈一個LINQ查詢的例子嗎? – Clayton 2011-06-10 22:11:39

+0

實體不同於我原來的問題,供應商實體是PK&DirectSupplier實體是FK.I想要返回直接供應商的供應商。 VS正在強調「s.DirectSupplier」,並且在源類型爲「System.Data.Objects.ObjectSet 」的查詢表達式的後續from子句中不允許出現「TransactionScopeTest.DirectSupplier類型的表達式」 'SelectMany'中的類型推斷失敗「 var q =(從s in db.Suppliers from d in s.DirectSupplier select d); – suggy1982 2011-06-10 22:31:33

2

您的類別實體中應該有一個名爲Products的導航屬性,其中包含所有相關的產品實體,您應該使用此屬性而不是手動連接。

+0

謝謝我將檢查我的模型中的設置。 – suggy1982 2011-06-09 20:44:16

+0

我有我的2個實體之間的導航屬性設置,但關係是1> 0..1,當我試圖寫任何類型的涉及這兩個linq查詢它是拋出一條錯誤消息,說:「類型推斷失敗打電話給'SelectMany'「。我是否在做錯誤的事情,閱讀有人建議使用實體引用的錯誤,但我不知道這是否屬實? – suggy1982 2011-06-10 22:08:22