2013-04-09 3 views
0

Я обычно не плохо отношусь к LINQ, но это дает мне головную боль. Нужны свежие умы, чтобы взглянуть.Преобразование SQL-запроса в 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

Я понятия не имею, почему ваш запрос не выглядит так:

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