13

我查看了 SO 和其他站点上的各种问题,这似乎是在 LINQ 中执行 a 的正确语法,但它只是不起作用: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. 这两个表由 链接STAGEID。我得到编译器错误:

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

在 LINQ 连接表达式中,两者st都有task红色波浪线。请告诉我我正在做一些愚蠢的事情。

4

1 回答 1

18

外部序列中的键选择器应该先行。在您的情况下,外部序​​列是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());
于 2013-04-08T21:39:26.267 回答