0

私は通常LINQが苦手ではありませんが、これは頭痛の種です。見るには新鮮な心が必要です。

私は4つのテーブルを持っています

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 で実装するためのより良い方法がある場合。

4

1 に答える 1

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();
于 2013-04-09T17:08:35.557 に答える