这个LINQ JOIN是否存在某种语法错误?

时间:2013-04-08 21:38:14

标签: c# linq entity-framework join

我在SO和various questions上查看了other sites,并且此似乎是在LINQ中执行JOIN的正确语法,但它是只是不工作:

var stages = (from stage in entityManager.TPM_TASKSTAGE select stage);
var results = (from task in pv.TPM_TASK
               join st in stages on st.STAGEID equals task.STAGEID
               where task.TASKTYPE == "Solution"
               select new SolutionTask());

暂时忽略我实际上选择任何感兴趣的内容这一事实,但我希望能够访问每行st.NAME属性TPM_TASK 1}}。这两个表由STAGEID链接。我收到编译器错误:

  

名称'st'不在'equals'左侧的范围内。考虑   交换'equals'两侧的表达式。

在LINQ连接表达式中,sttask都有红色波浪形。请告诉我,我正在做一些愚蠢的事。

1 个答案:

答案 0 :(得分:14)

外部序列的键选择器应该先行。您的案例中的外部序列是pv.TPM_TASK。所以,你应该加入task.STAGEID equals st.STAGEID

var stages = (from stage in entityManager.TPM_TASKSTAGE select stage);
var results = (from task in pv.TPM_TASK
               join st in stages on task.STAGEID equals st.STAGEID // here
               where task.TASKTYPE == "Solution"
               select new SolutionTask());