Как мне преобразовать этот запрос SQL в LINQ to SQL - PullRequest
3 голосов
/ 01 апреля 2011

У меня следующий SQL-запрос, и я хочу преобразовать его в LINQ. Я хочу использовать подзапрос или синтаксис LINQ include и не хочу использовать join:

SELECT Count(*) AS CountOfRecs 
FROM tblAcc a
INNER JOIN tblAccOwner o ON
  a.[Creditor Registry ID] = o.[Registry ID] AND
  a.[Account No] = a.[Account No] 
WHERE 
  (a.[Account Owner ID] = 731752693037116688) AND 
   a.[Account Type] NOT IN ('CA00', 'CA01', 'CA03', 'CA04', 'CA02',
                            'PA00', 'PA01', 'PA02', 'PA03', 'PA04')) AND
  (DATEDIFF(mm, a.[State Change Date], GETDATE()) <= 4 OR
    a.[State Change Date] IS NULL AND 
   (a.[Account Type] IN ('OD','CL00','PL00') OR a.[Account Type] LIKE '%hala%'))

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

Преобразование этого в Linq должно быть довольно простым - хотя я думаю, что вы должны использовать join, если вы хотите тот же запрос!

Сначала создайте модель Linq2Sql и импортируйте ваши 2 таблицы, затем ваш запрос будетиметь общую структуру

var query = from acc in db.Accs
    join accOwner in db.AccOwners on {acc.regId, acc.AccountNo} equals {accOwner.regId, accOwner.AccountNo}
    where // your where conditions
          // - these should all convert quite easily
          // - just translate them one by one
    select acc;

var count = query.Count();

Если вам действительно нужно использовать подзапрос, то, поскольку вы являетесь экспертом по SQL, сначала напишите запрос в SQL, затем протестируйте его, затем переведите запрос черезв Linq, затем протестируйте его - переводя строку за строкой, у вас все будет хорошо - и вы также обнаружите, что Intellisense - это прекрасно!


Пожалуйста, поймите, что если вы используете .Include(), то выв любом случае, вероятно, используется join в сгенерированном SQL.

3 голосов
/ 01 апреля 2011

Вы можете использовать LinqPad или Linqer .Я попытался бы преобразовать его в LinqPad, но мне нужна база данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...