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
};
该代码有效吗?如果没有 - 究竟会发生什么?