c# - 如何在 LINQ 中对单个连接中的多个字段进行左连接

标签 c# linq left-join sql-to-linq-conversion

我正在尝试对 LINQ 执行这个简单的 sql 查询。但它给我错误。

这是需要转换为 LINQ 的 SQL 查询

 DECLARE @groupID int
 SET @groupID = 2
 SELECT * 
    FROM dbo.Person p
    LEFT JOIN dbo.PersonGroup pg ON ( p.PersonID = pg.PersonID AND pg.GroupID = @groupID)

忽略@groupID。它将作为 LINQ 查询的函数参数提供。

这是我尝试过的 LINQ 查询。

from p in Person
 join pg in PersonGroup on new { p.PersonID, groupID } equals new { pg.PersonID, pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

其中 groupID 作为函数参数提供。 GroupID 和 PersonID 都是 int。但它给了我以下错误,

Error   2   The type of one of the expressions in the join clause is incorrect.  Type inference failed in the call to 'GroupJoin'.

不胜感激。

最佳答案

你的代码

from p in Person
 join pg in PersonGroup on new { p.PersonID, groupID } equals new { pg.PersonID, pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

改成

from p in Person
 join pg in PersonGroup on new { Person = p.PersonID, Group = groupID } equals new { Person = pg.PersonID, Group = pg.GroupID } into t
 from rt in t.DefaultIfEmpty()

这样它将使用匿名类型加入

关于c# - 如何在 LINQ 中对单个连接中的多个字段进行左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30402063/

相关文章:

c# - 以编程方式删除缓存持久 Playready 许可证

c# - 工作中断查询之谜

c# - 将两个不同类型的列表匹配在一起

mysql 使用 group by 多次连接同一个表

MySQL Select/Join 仅返回第一行

C# 从数据 POST 上提供的服务器响应中获取 Cookie

c# - 如何在 C# 中获取当前用户的 Active Directory 详细信息

c# - Linq 结果到 IEnumerable 无效转换

c# - 按匹配关键字的数量对列表/数组进行分组或排序

mysql - SQL:获取一个表的计数并加入其他表