【发布时间】:2013-01-21 17:36:43
【问题描述】:
我想创建一个等效于Left Join 的 LINQ 连接语句
我的桌子是这样设置的:
Recipe
RecipeID
...
Instruction
RecipeID
StepID
SomeFlag
...
等效 SQL:
SELECT *
FROM Recipe r
LEFT JOIN Instruction i
ON r.RecipeID = i.RecipeID
AND SomeFlag > 0
这是我目前所拥有的:
var tmp = db.Recipe
.GroupJoin(
db.Instruction,
r => r.RecipeID,
i => i.RecipeID,
(r, i) => new {r, i},
???);
首先,GroupJoin 是此类操作的正确选择吗?据我了解,Join 相当于 SQL 的“Inner Join”,GroupJoin 相当于“Left Join”。其次,获得我想要的结果的正确语法是什么?我已经搜索了一段时间,但似乎找不到合适的答案使用扩展方法。
【问题讨论】:
-
查看stackoverflow.com/questions/1092562/left-join-in-linq?rq=1 了解如何进行左连接。要应用 SomeFlag > 0,您可以在加入前使用 where 条件
-
您要检索什么?有许多不同的方法可以检索相同的数据。
-
@gabba 我想我可以用斜体或粗体表示,但我专门寻找使用
extention methods的解决方案。下面塞德里克的回答告诉我在加入之前过滤的能力,我想这可以从你提供的链接中推断出来。 -
@Bob。提供的 SQL 不清楚吗?我希望加入
Recipe和Instruction等效RecipeID和SomeFlag > 0