2014-02-17 31 views
2

我想避免3部分連接,我想直接到我的第三個表名稱,但林新到LINQ到SQL和林不知道我需要如何設置一切到最多正常工作。的我在做什麼,但不想做的一個例子是:設置LINQ到SQL上下文

from x in currentLogs 
join y in cDataContext.CategoryCountryCategoryTypeMappings 
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMappingID 
join cat in cDataContext.Categories 
on y.CategoryID equals cat.CategoryID 
where x.Response != 0 && cat.StorefrontID==storeID 
select x).Count(); 

我想要做的是:

from x in currentLogs 
join y in cDataContext.Categories 
on x.CategoryCountryCategoryTypeMappingID equals y.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID 
where x.Response != 0 && y.StorefrontID==storeID 
select x).Count(); 

,但我得到一個錯誤時,返回

cat.CategoryCountryCategoryTypeMapping.CategoryCountryCategoryTypeMappingID 

通過我自動生成的dbml,Sequence不止是一個實體。

我的佈局是這樣的:DataContext

DownloadLog到cccmapping是一對一的,一切是一對多。我可能會搞砸了一點,但是下載日誌記錄了一個cccMapping,因爲cccmapping有國家類別和分類類型的排列,每個排列都是唯一的。不知道這是否使映射表一對一,或一對多。以太的方式,我建立我的背景權利做我即將做的事情?

+0

爲什麼你想避免3表連接?在無論如何要發生的場景下 –

+0

它可能很小,但代碼簡單/可讀性。如果cccMappings有一個類別,並且該類別有一個名稱,那麼在代碼中說明cccMappings.categories.select(...)。名稱 –

+0

爲什麼不使用類別爲Category.CategoryCountryCategoryTypeMappings的導航屬性在類模型中?你可能根本不需要單一連接。 –

回答

0

根據您的設置,您應該能夠使用導航屬性。所以沿着這些線應該有效。

currentLogs 
    .Where(log => log.Response != 0 && 
     log.CategoryCountryCategoryTypeMappings 
      .Any(map => map.Categories 
       .Any(cat => cat.StoreFrontID == storeID))).Count();