2014-09-26 85 views
2

我想将SQL查询转换为LINQ,但不知道如何使用连接语句中的AND子句,就像我在此示例SQL查询中所述。如何使用LIN内部LINQ连接

我已经突出显示了我无法弄清楚的部分。

DECLARE @GroupId INT = 10 

SELECT 
    U.UserName, 
    U.UserID, 
    @GroupId AS "GroupID", 
    CASE WHEN GU.GROUPID IS NULL THEN 0 
     ELSE 1 END 
     AS InGroup 
FROM Users U 
LEFT JOIN GroupUsers GU on GU.UserID = U.UserID 
    AND GU.GROUPID = @GroupId -- HERE!! 

因为我有

from user in Users 
join gu in GroupUsers on user.UserID equals gu.UserID into subq 
from sub in subq.DefaultIfEmpty() 
where sub.GroupID == 10 || sub == null 
select new 
{ 
    Username = user.UserName, 
    UserId = user.UserID, 
    GroupId = 10, 
    InGroup = sub != null 
} 

,但它使用WHERE删除数据这是接近。

回答

2

你可以嵌入GroupId条件到查询:

from user in Users 
join gu in GroupUsers.Where(gu => gu.GroupID == 10) 
    on user.UserID equals gu.UserID into subq 
from sub in subq.DefaultIfEmpty() 
select new 
{ 
    Username = user.UserName, 
    UserId = user.UserID, 
    GroupId = 10, 
    InGroup = sub != null 
} 
+0

谢谢你,这就是我要找的。 – 2014-09-26 13:17:26

0

这是你如何加入多个列:

from user in Users 
join gu in GroupUsers on new { user.UserID, user.GroupID } equals new { gu.UserID, gu.GroupID } subq 
from sub in subq.DefaultIfEmpty() 
select new 
{ 
    Username = user.UserName, 
    UserId = user.UserID, 
    GroupId = sub == null ? null : sub.GroupID, 
    InGroup = sub != null 
}