Linq相关表不可查询错误

时间:2010-08-17 14:29:20

标签: vb.net linq linq-to-sql

我在VB.NET中遇到了Linq的问题。 我从我的数据库创建了一个.dbml文件,一切看起来都很好 - 表之间的关系“箭头”是可见的等等。

但是当我想使用简单查询时(取自MS的101 Linq Samples):

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

我收到错误:

  

“INTegrity.WorkType”类型的表达式不可查询。确保您没有错过LINQ提供程序的程序集引用和/或名称空间导入。

h.Worktype在Intellisense中可见......

我可以手动加入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表与Hours表有1对多的关系(正如您在WorkTypeId列中看到的那样)

1 个答案:

答案 0 :(得分: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}