Есть ли способ написать этот запрос LINQ, используя лямбда-выражения? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть запрос linq, который я использую, чтобы получить данные из 3 таблиц, используя 2 объединения. Я бы предпочел написать это как лямбда-выражение, чтобы моя команда сочла его более читабельным. Есть ли способ сделать это хотя? Я не могу найти достойных примеров.

var q = (
     from sus in susManager.Get()
     join su in suManager.Get() on sus.SUId equals su.Id
     join p in pManager.Get() on su.PId equals p.Id
     where sus.EndTimeStamp >= oneDayAgo
     select new
     {
         Name = p.FirstName + " " + p.LastName,
         Email = su.Email,
         LastLogIn = sus.StartTimeStamp,
         LastSessionDurationInMinutes = 
             DbFunctions.DiffMinutes(sus.StartTimeStamp, sus.EndTimeStamp),
         LastActive = sus.EndTimeStamp
     }).ToList();

Ответы [ 2 ]

4 голосов
/ 13 мая 2019

Лямбда-эквивалент будет выглядеть примерно так, при условии, что функции Get() возвращают List s:

var q = systemUserSessionManager.Get()
    .Where(sus => sus.EndTimeStamp >= oneDayAgo)
    .Join(systemUserManager.Get(), 
        sus => sus.SystemUserId, 
        su => su.Id, 
        (sus, su) => new { sus, su })
    .Join(personManager.Get(), 
        j => j.su.PersonId, 
        p => p.Id, 
        (j, p) => new { sus = j.sus, su = j.su, p })
    .Select(x => new
    {
        Name = p.FirstName + " " + p.LastName,
        Email = su.Email,
        LastLogIn = sus.StartTimeStamp,
        LastSessionDurationInMinutes = 
            DbFunctions.DiffMinutes(sus.StartTimeStamp, sus.EndTimeStamp),
        LastActive = sus.EndTimeStamp
    })
    .ToList();
0 голосов
/ 13 мая 2019

Попробуйте что-то вроде этого

var q = (
     from sus in systemUserSessionManager.Get()
     join su in systemUserManager.Get() on sus.SystemUserId equals su.Id
     join p in personManager.Get() on su.PersonId equals p.Id
     select new { sus = sus, su = su, p = p})
     .Where(x => x.sus.EndTimeStamp >= oneDayAgo)
     .Select(x => new {
         Name = x.p.FirstName + " " + x.p.LastName,
         Email = x.su.Email,
         LastLogIn = x.sus.StartTimeStamp,
         LastSessionDurationInMinutes = 
             DbFunctions.DiffMinutes(x.sus.StartTimeStamp, x.sus.EndTimeStamp),
         LastActive = x.sus.EndTimeStamp
     }).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...