我对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中实现我正在尝试做的事情。
答案 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();