【发布时间】:2013-08-14 14:38:37
【问题描述】:
这里有很多关于如何在 Linq 中进行准左连接的示例(this,还有this,甚至是this)。他们都指向将少数父表连接到“外部”表中,然后使用DefaultIfEmpty() 从该表中进行选择。听起来很简单,所以我在 LinqPad 中创建了这个 sn-p:
dim foo = (
from c in context.Contacts
join p in context.Plants on c.PlantID equals p.PlantID into outer
from o in outer.DefaultIfEmpty()
where p.PlantCode = 2
select c.ContactName, p.PlantName
)
等效的 SQL 语句是:
SELECT c.ContactName, p.PlantName
FROM Contacts c
LEFT JOIN Plants p ON c.PlantID = p.PlantID
WHERE p.PlantCode = 2
看起来它应该可以工作,但 LinqPad 一直在 join...into 行停止并出现以下错误:')' expected.
我做错了吗?还是 LinqPad 疯了?
【问题讨论】:
-
我假设您使用的是 VB.NET,因为您使用的是
Dim关键字。如果是这样,请标记您的问题以指示 VB.NET。 -
对...很好。谢谢。
-
您的查询没有意义。条件 'where p.PlantCode = 2' 否定了外连接的效果并将其变成内连接。你到底想做什么?
-
我没有调试查询;我正在调试为什么我的 LINQ 左连接不起作用。示例查询只是为了演示一个失败的左连接,无论从查询的角度来看它是否有意义,从语法的角度来看它足够有意义,Ahmad 能够为我指出正确的方向。
-
啊。只是在 LINQ 中有一种更简单的方法来执行左外连接,但它只有在查询在语义上有效时才有效。您希望我修复您的查询然后发布吗?
标签: vb.net linq-to-sql linqpad