将SQL查询转换为LINQ - 四个表

时间:2013-04-09 16:34:01

标签: sql linq

我对LINQ通常不是很糟糕,但这个让我很头疼。 需要新鲜的头脑来看看。

我有四张桌子

Task         Account       AcctUserXref      User
-----        -------       ------------      -----
TaskID       AcctID        UserID (fk)       UserID
AcctNumber   AcctNumber    AcctID (fk)       UserName

我正在尝试根据UserName查找所有任务。 这是我试图转换的SQL语句的片段。

SELECT @cntTask = Count(TaskID) 
FROM Task tsk, Account acct, AcctUserXref acx
WHERE tsk.AcctNumber = acct.AcctNumber
AND acct.AcctID = acx.AcctID
AND acx.AcctID IN (SELECT acx2.AcctID
                   FROM AcctUserXref acx2, User usr
                   WHERE acx2.UserID = usr.UserID
                   AND usr.UserName = @UserName)

如何直接将其转换为LINQ?或者,如果有更好的方法在LINQ中实现我正在尝试做的事情。

1 个答案:

答案 0 :(得分:1)

我不知道为什么你的查询看起来不像那样:

SELECT @cntTask = Count(TaskID) 
FROM Task tsk, Account acct, AcctUserXref acx, User usr
WHERE tsk.AcctNumber = acct.AcctNumber
AND acct.AcctID = acx.AcctID
AND acx.UserID = usr.UserID
AND usr.UserName = @UserName

LINQ等价物:

var numberOfTasks = (from u in Users
                     join au in AccountsToUsers on u.UserId equals au.UserId
                     join a in Accounts on au.AcctID equals a.AcctID
                     join t in Tasks on a.AcctNumber equals t.AcctNumber
                     where u.UserName == "NameYoureLookingFor").Count();