Преобразовать запрос Sql с помощью предложения group by и / или функции aggregate в linq to sql? - PullRequest
0 голосов
/ 07 августа 2009

У меня есть таблица Auditing logins, я хотел бы просто извлечь последний логин для каждого пользователя, что достигается в приведенном ниже sql.

Как мне отформатировать запрос sql в запрос linq to sql?

SELECT * FROM AuditTable adt1
    inner join UserTable usr
        on adt1.[UserName] = usr.[User_Id]
WHERE [TimeStamp] = ( SELECT MAX([TimeStamp])
                      FROM AuditTable adt2
                      WHERE adt1.UserName = adt2.UserName)

Еще один способ написания запроса в SQL:

SELECT adt1.[UserName], usr.First_Name, max([TimeStamp]) as [TimeStamp]
FROM AuditTable adt1
    INNER JOIN UserTable usr
        on adt1.[UserName] = usr.[User_Id]
GROUP BY adt1.[UserName] ,usr.First_Name

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

запрос № 2:
из adt1 в dc.AuditTable
присоединяйтесь к usr в dc.UserTable на adt1.UserName == usr.UserID
группа adt1 по adt1.username int ag
выберите новый {UserName = ag.Key, TSMax = ag.Max (ts => adt1.TimeStamp)}

Зачем присоединяться к пользовательской таблице? Фильтр

0 голосов
/ 07 августа 2009

у меня получилось ... ответом было использование ключевого слова let.

в качестве отступления, я настоятельно рекомендую использовать LinqPad при попытке решить эти проблемы.

from adt in AuditTable
    join usr in UserTable
        on adt.UserName equals usr.User_Id
group adt by 
    new { adt.UserName, adt.Roles, usr.First_Name, usr.Last_Name } 
into g
let LastAccessed = g.Max(a => a.TimeStamp)
select new 
    { UserName = g.Key.UserName,
      Roles = g.Key.Roles,
      FirstName = g.Key.First_Name,
      LastName = g.Key.Last_Name,
      TimeStamp = LastAccessed
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...