Поиск MAX даты в запросе LINQ join - PullRequest
0 голосов
/ 20 октября 2011

Прошу прощения за то, что у меня нет знаний по этому вопросу, так как этот вопрос довольно простой, но у меня есть столбец nullable [DateTime], и ​​я хотел бы использовать запрос LINQ для выбора записей для каждого пользователь с максимальной "меткой времени", найденной при объединении.

Вот мой запрос на данный момент.

return (from t1 in db.BU
                from t2 in db.UserNames
                 .Where(t => (t.User_Username == t1.Username))
                from t3 in db.Logins
                .Where(t => (t.username == t1.Username))
                where myBusinessUnits.Contains(t1.BusinessUnit_ID)
                orderby (t2.Name) descending
                select new GlobalMyTeamDetailModel
                {
                     LastLogin = t3.timestamp,
                     Name = t2.Name

                });

Если бы кто-нибудь мог мне помочь, я был бы признателен.

Это максимальное значение таблицы «Логин», которую я пытаюсь получить для каждого пользователя.

РЕДАКТИРОВАТЬ: еще одна попытка, которая не дала желаемого результата:

        var result =
           (from t1 in db.LoginHistories
            where t1.username == user

            from t2 in db.UserNames
                .Where(t => (t.User_Username == t1.username))

            from t3 in db.UserBusinessUnits
                .Where(t => (t.Username == t1.username))

            where myBusinessUnits.Contains(t3.BusinessUnit_ID)

            group t1 by new { t1.username } into g
            let MaxDate = g.Max(uh => uh.timestamp)

            select new GlobalMyTeamDetailModel
                {
                    LastLogin = MaxDate,
                    Name = g.Key.username
                });

Ответы [ 2 ]

1 голос
/ 20 октября 2011

, если у вас всегда есть хотя бы строка соединения, сортируйте t3 по отметке времени и извлекайте первую (должно быть наибольшее значение).

return (from t1 in db.BU
            from t2 in db.UserNames
             .Where(t => (t.User_Username == t1.Username))
            from t3 in db.Logins
            .Where(t => (t.username == t1.Username))
            .OrderBy(u => u.timestamp).First()           // <--------- add this
            where myBusinessUnits.Contains(t1.BusinessUnit_ID)
            orderby (t2.Name) descending
            select new GlobalMyTeamDetailModel
            {
                 LastLogin = t3.timestamp,
                 Name = t2.Name

            });
0 голосов
/ 20 октября 2011

используйте group by и max в linq, как показано ниже

 From p In db.Products _
            Group p By p.CategoryID Into g = Group _
            Select New With {g, .MaxPrice = g.Max(Function(p) p.UnitPrice)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...