如何做好左联接在LINQ在单个连接多个字段 [英] How to do left joins in LINQ on multiple fields in single join

查看:553
本文介绍了如何做好左联接在LINQ在单个连接多个字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图做到这一点简单的SQL查询LINQ。但它给我的错误。



下面是需要CONVER到LINQ SQL查询

 定义@groupID INT 
设置@groupID = 2
选择*
FROM dbo.Person p
LEFT JOIN dbo.PersonGroup皮克ON(p.PersonID = pg.PersonID和pg.GroupID = @groupID)

忽略@groupID。这将提供为LINQ查询功能的参数。



下面是LINQ查询什么,我都试过了。



<$ P在消费
$ p> 从对加入皮克在PersonGroup新{p.PersonID,GROUPID}等于新的{pg.PersonID,pg.GroupID}成T
从RT在t.DefaultIfEmpty()

在哪里GROUPID作为函数参数提供。这两个groupId和是PersonID是int类型。但它给了我下面的错误,

 错误2联接子句中的类型表现之一是不正确。类型推断在调用群组加入失败。 



小的帮助,将不胜感激。


解决方案

您代码

 从人物
p加入皮克在PersonGroup新{p.PersonID,GROUPID}在t.DefaultIfEmpty()等于新的{pg.PersonID,pg.GroupID}成T
从RT

从p改变为

 在人物
在PersonGroup加入皮克新{=人p.PersonID,组= GROUPID}等于新{=人pg.PersonID,组= pg.GroupID}入T
从RT在t.DefaultIfEmpty()

这样,它会加入使用匿名类型


I am trying to do this simple sql query to LINQ. But its give me error.

Here is the SQL query that need to conver to LINQ

 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)

Ignore @groupID. which will be provided as function parameter for LINQ query.

Here is LINQ query what i have tried.

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()

Where groupID is provided as function parameter. Both GroupID and PersonID are int. But it gives me following error,

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

Little help would be appreciated.

解决方案

Your Code

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()

Change it to

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()

That way it will join using the Anonymous type

这篇关于如何做好左联接在LINQ在单个连接多个字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆