внутренний запрос linq inner join и условный выбор - PullRequest
0 голосов
/ 26 июня 2018

У меня есть следующий оператор SQL, который я пытаюсь преобразовать в Linq:

SELECT a.lastname,a.firstname,a.program,a.[start],a.[end],
CASE WHEN a.[end] IS NULL AND a.[start] < c.lastStart THEN 1 ELSE 0 END as error,
CASE WHEN a.[end] IS NULL AND a.[start] = c.lastStart THEN 1 ELSE 0 END as loggedOn
FROM usagelog a 
INNER JOIN (SELECT b.username,max(b.[start]) AS lastStart FROM usagelog b GROUP BY b.username) c 
ON a.username = c.username
ORDER BY a.lastname, a.firstname,a.program,a.[start]

Результаты должны выглядеть следующим образом:

Результаты SQL

Пока у меня есть следующее:

var query = (from u in UsageLogs
             orderby u.lastname,u.firstname,u.program.u.start
             select new
             {
              lastname = u.lastname,
              firstname = u.firstname,
              program = u.program,
              start = u.start,
              end = u.end
              })

Я застрял в том, как написать внутреннее соединение с помощью дополнительного оператора select и операторов 'CASE'.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 26 июня 2018

вы можете использовать группу лямбда-выражений по , а для условного выбора используйте встроенное условие , как показано ниже:

var query = (from u in UsageLogs
            join c in (UsageLogs.GroupBy(r => r.username).Select(r => new {username = r.Key, lastStart = r.Max(p => p.start)))
            on u.username equals c.username
            orderby u.lastname,u.firstname,u.program.u.start
            select new
            {
                lastname = u.lastname,
                firstname = u.firstname,
                program = u.program,
                start = u.start,
                end = u.end,
                error = (u.end == NULL && u.start < c.lastStart) ? 1 : 0,
                loggedOn = (u.end == NULL && u.start == c.lastStart) ? 1 : 0,
            });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...