2013-04-09 32 views
0

我通常對LINQ並不好,但是這個讓我很頭疼。 需要新鮮的頭腦去看看。將SQL查詢轉換爲LINQ - 四個表

我有四個表

Task   Account  AcctUserXref  User 
-----  -------  ------------  ----- 
TaskID  AcctID  UserID (fk)  UserID 
AcctNumber AcctNumber AcctID (fk)  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

我不知道爲什麼你的查詢看起來不像是:

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(); 
+0

這個偉大的工程!我沒有寫下查詢,但你說得對,這簡單得多。我會通過它。謝謝! – kei 2013-04-09 17:29:37