2011-07-11 51 views
0

我使用c#,linq和EF4。LINQ - EF - FROM或JOIN

我已經在我的概念模型代表了我的數據庫的兩個表:

數據庫表:

CmsContents 
CmsCategories 
CmsRelatedCategories (Pure Juction Table) 

實體類型:

CmsContent 
CmsCategory 

Entyt集:

CmsContents 
CmsCategories 

我h AVE一些導航特性:

for CmsContents --> CmsCategories --> Return Collection of Cms CmsCategory 
for CmsCategories --> CmsContents --> Return Collection of Cms CmsContents 

我需要查詢實體框架retrive分類的列表中結表中沒有相關的選擇內容

目前我使用此代碼(注意兩個FROM):

var categories = from category in context.CmsCategories 
       from content in category.CmsContents 
       select category; 

返回的整個數據庫,而不是具體的內容不相關的所有類別的清單。

我需要展示類未同夥的名單與具體內容

  • 任何想法,該怎麼辦呢?
  • 我可以使用JOIN嗎? (EF不直接映射他Pure結表)

您能否給我寫LINQ查詢,以便我可以有一個清晰的圖片。 感謝您的幫助。

+0

,你能不能給我們你是如何刨過濾「的具體內容」 – Nix

+0

尼克斯嗨的一個例子,我希望我的問題是很清晰的,問題是我不能夠在一個特定的工作內容。任何想法如何解決它? – GibboK

回答

0

你可以嘗試:

CmsCategories.Except(myContent.CmsCategories) 

爲myContent是CmsContent的一個實例,假設你之前所獲取它,你必須啓用延遲加載。

編輯:代碼示例可能:

var myContent = context.CmsContents.FirstOrDefault(c => c.Id == 1); 
var contentCategories = myContent.CmsCategories; 
var otherCategories = context.CmsCategories.Except(contentCategories); 
foreach (var item in otherCategories) 
{ 
//whatever you need to do 
} 
+0

感謝Matteo,所以我可以放置你建議我的代碼? – GibboK

+0

我也收到一個錯誤無法創建類型'WebProject.DataAccess.DatabaseModels.CmsCategory'的常量值。在此上下文中僅支持基本類型(如Int32,String和Guid)。 – GibboK

+0

我發佈的代碼是將返回不屬於特定產品的類別集合的查詢。你會把它放在你需要的地方,我真的不明白你的最後一個問題。你發佈的錯誤是一個合理的錯誤,但我不可能知道你爲什麼要開始它,如果你不給我一些工作的上下文。 –

0

我想你想從CmsCategories選擇並排除任何在關聯表

var query = 
      context 
       .CmsCategories 
       .Except(context.CmsRelatedCategories.Select(x=>x.CmsCategory));