【发布时间】:2013-04-08 21:38:14
【问题描述】:
我查看了 SO 和 other sites 上的 various questions,这似乎是在 LINQ 中执行 JOIN 的正确语法,但它只是不起作用: p>
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());
暂时忽略我实际上没有选择任何感兴趣的事实,但我想访问TPM_TASK 每一行的st.NAME 属性。这两个表由STAGEID 链接。我得到编译器错误:
名称“st”不在“equals”左侧的范围内。考虑 交换 'equals' 两边的表达式。
在 LINQ 连接表达式中,st 和 task 都有红色波浪线。请告诉我我正在做一些愚蠢的事情。
【问题讨论】:
-
您是否尝试按照错误消息中的确切说明进行操作? ("考虑交换 'equals' 两边的表达式")
-
@JonSkeet - 这实际上是我尝试的第一个,但我的表达是
task.STAGEID == st.STAGEID。这会产生类似的编译器错误(建议我交换表达式)。所以我做到了,并切换到equals认为这可能会有所作为。我没有尝试task.STAGEID equals st.STAGEID这是有效的组合!叹息。 -
当您拥有
task.STAGEID == st.STAGEID时,您不会收到相同的错误消息,因为您的加入在那时会完全无效。 -
@JonSkeet - 你是对的,但 Visual Studio 似乎会暂时缓存该错误消息,直到你进行完整编译。 IDE 的错误检查似乎没有即时捕获
==,但确实捕获了它无法解析st的上下文的事实。我的错是没有进行编译以查看 real 错误消息。
标签: c# linq entity-framework join