2010-08-17 20 views
0

我在VB.NET中遇到Linq問題。 我已經從我的分貝創建了一個.dbml文件,並且一切都很好 - 表格之間的關係「箭頭」是可見的,等等。Linq相關表格無法查詢錯誤

但是,當我想使用簡單查詢(取自101 Linq Samples by MS) :

Dim q = From h In dc.Hours, w In h.WorkType 

我收到一個錯誤:

Expression of type 'INTegrity.WorkType' is not queryable. Make sure you are not missing an assembly reference and/or namespace import for the LINQ provider.

h.Worktype是在智能感知可見......

我可以在LINQ查詢手動加入,但不應該自動關係?

的作品的完整的查詢,但使用「手動連接」是這樣的:

Dim q1 = From g In dc1.Hours _ 
Join pr In dc1.WorkType On g.WorkTypeId Equals pr.WorkTypeId _ 
Where g.WorkerId = workerid _ 
Select New With {g.EntryId, g.Date, pr.WorkTypeDesc, g.Minutes} 

Worktype表有1與營業時間表一對多關係(因爲你可以看到在WorkTypeId列)

+0

中的LINQ VB是國外給我,但我在C#中非常熟悉的LINQ。它看起來不像你在做這個查詢。你想寫一個連接嗎?你的選擇在哪裏? – jsmith 2010-08-17 14:35:06

+0

我寫第一行時顯示錯誤,我甚至沒有選擇。是的,我想使用.dbml文件中的關係信息進行連接。 – ufoq 2010-08-17 14:38:51

回答

2

我不說話VB LINQ,所以我會盡力去適應C#

From h In dc.Hours, w In h.WorkType 

from h in dc.Hours 
from w in h.WorkType 
..... 

這意味着WorkType是一個集合,它的名稱不建議。我想你想要更接近

from h in dc.Hours 
let w = h.WorkType 
.... 

當然,如果沒有「....」中的部分,這些都不會做任何事情。如果你告訴我們你想在那裏做什麼,我們可以爲你解決它。

更新#1:

試圖拼湊出你在做什麼,讓我們猜測,時間& WorkType是有一個一對多的關係(在「一」方WorkType)表,因此每個小時記錄匹配一個WorkType記錄。在這種情況下,Linq-to-SQL會自動生成一個標量小時內的WorkType屬性。您不需要「from ... in」來訪問它。這只是一個屬性,可以直接在需要的地方使用它。

更新#2:(從評論) 我認爲這應該工作:

Dim q1 = 
From g In dc1.Hours 
Where g.WorkerId = workerid 
Select New With {g.EntryId, g.Date, g.WorkType.WorkTypeDesc, g.Minutes} 
+0

它比我想象的更簡單。謝謝詹姆斯! – ufoq 2010-08-17 15:03:20