2013-05-29 62 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。我想我需要做更多的閱讀和練習。 –