2013-05-29 48 views
1

我使用实体框架5.LINQ到EF交叉联接问题

下面是一个成功运行我的SQL查询:

Select person.pk 
from person, job 
Where 
person.jobId= job.pk 
and 
job.Description = 'CEO' 

我已经在上面的查询更改表和列名。

现在whenI我上面的查询转换为下面的LINQ:

from person in Context.Person 
from job in Context.Job 
where 
    person.jobId== job.PK && 
    job.Description == "CEO" 
select new { 
    person.PK 
}; 

但上面的LINQ是给我一个例外:

无法创建类型“模式的恒定值。工作'。 在此上下文中仅支持基本类型(如Int32,String和Guid) 。

该LINQ看起来很简单,但我无法弄清楚我缺少什么。

这可能是重复的,但所有类似于这个问题的问题都不同,并且他们都没有解决这个问题。

任何帮助,将不胜感激。

+1

我很好奇,你为什么不使用联接语法的捧场:'从人Context.Person在Context.Job上person.jobId参加工作等于job.PK哪里job.Description ==“CEO”选择新的{person.PK}'? – Vlad

+0

更好的想法是定义外键并使用导航属性,所以联接将由EF自动为您处理。 – Vlad

+0

我读了一些交叉连接的帖子,我相信这是他们在[1]中遵循的语法(http://stackoverflow.com/questions/10670678/how-do-you-code-a-cross-join-在LINQ),[2](http://stackoverflow.com/questions/4715744/sql-to-linq-conversion-with-cross-join)和[3](http://stackoverflow.com/questions/ 56547 /怎么办 - 你 - 执行 - 一个交叉联接与 - LINQ到SQL)。对于这个问题,我不太擅长SQL或LINQ。我想我需要做更多的阅读和练习。 –

回答

1

SQL正在执行连接,为什么不在Linq中执行一个?如果您只想要一个字段,只需选择该字段(将映射到List<T>,其中TPK字段的类型),但我不确定为什么要投射到匿名类型中。

试试这个:

from person in Context.Person 
join job in Context.Job on person.jobID equals job.PK 
where job.Description == "CEO" 
select person.PK; 
+0

非常感谢。这工作。我读了一些交叉连接的帖子,我相信这是他们遵循的语法[1](http://stackoverflow.com/questions/10670678/how-do-you-code-a-cross-join-in- linq),[2](http://stackoverflow.com/questions/56547/)(http://stackoverflow.com/questions/4715744/sql-to-linq-conversion-with-cross-join)和[3]怎么办 - 你 - 执行 - 一个交叉联接与 - LINQ到SQL)。对于这个问题,我不太擅长SQL或LINQ。我想我需要做更多的阅读和练习。 –