string date = DateTime.Today.Date.ToShortDateString();
var grouped = from a in db.Logs.ToList()
where a.date == date
group a by a.email
into g
let ordered = g.OrderBy(x => x.date).ToList()
let firstLogin = ordered.First()
let lastLogin = ordered.Last()
select new
{
first_login_time = firstLogin.login_time,
first_login = firstLogin.login,
last_login_time = lastLogin.login_time,
last_login = lastLogin.login
};
Обновление
Страница просмотра администратора должна иметь только первый логин и последний выход для определенного электронного письма на текущую дату.
string date = DateTime.Today.Date.ToShortDateString();
var grouped = from a in db.Logs.ToList()
where a.login.Date == date
group a by a.email
into g
let firstLogin = g.OrderBy(x => x.login).First() // order by login time and get first
let lastLogout = g.OrderBy(x => x.logout).Last() // order by lotgout time and get last
select new
{
email: g.Key,
first_login = firstLogin.login, // first login
last_logout = lastLogin.logout // last logout
};
Я надеюсьВаши поля login
и logout
имеют тип datetime
.Вы все еще не поняли вопрос.Когда я просил вас получить схему таблицы, я предполагал, что вы меня за что-то наподобие:
CREATE TABLE [dbo].[Logs](
[username] [nvarchar](4000) NOT NULL,
[email] [nvarchar](4000) NOT NULL,
[login] [datetime] NULL,
[logout] [datetime] NULL
)
Или, может быть, объявление класса
public class Log {
public string email {get; set; }
public string username {get; set; }
public DateTime login {get; set; }
public DateTime logout {get; set; }
}
Вы можете научиться задавать вопросы
Обновление 2
Предположим, у меня 3 разных адреса электронной почты.Если они получили доступ к моему приложению, там время входа в систему и время выхода из системы записываются.
Table[Login_details]
id employee date login logout email
1 ShobaBTM 2019-03-18 16:12 16:12 shobabtm@gmail.com
2 neymarjr 2019-03-18 16:22 16:22 neymar@gmail.com
3 Cristiano 2019-03-18 16:23 16:23 cr7@gmail.com
4 neymarjr 2019-03-18 16:25 16:25 neymar@gmail.com
5 neymarjr 2019-03-18 16:30 16:32 neymar@gmail.com
6 neymarjr 2019-03-18 16:42 16:45 neymar@gmail.com
В представлении администратора у меня должно быть это
1 ShobaBTM 2019-03-18 16:12 16:12
2 Cristiano 2019-03-18 16:23 16:23
3 neymarjr 2019-03-18 16:25 16:45
Хорошопопробуйте это:
string date = DateTime.Today.Date.ToShortDateString();
var grouped = from a in db.Logs.ToList()
where a.date == date
group a by new { a.employee, a.date }
into g
let firstLogin = g.OrderBy(x => TimeSpan.ParseExact(x.login, "hh\\:mm")).First() // order by login time and get first
let lastLogout = g.OrderBy(x => TimeSpan.ParseExact(x.logout, "hh\\:mm")).Last() // order by logout time and get last
select new
{
employee = g.Key.employee,
date = g.Key.date,
first_login = firstLogin.login, // first login
last_logout = lastLogin.logout // last logout
};
Этот код работает?Если нет - что именно происходит?