我正在尝试获取用户的上次登录日期,如果不存在登录记录,请返回今天的日期。到达那里我需要一些帮助。我收到以下错误,甚至没有默认值组件。
无法隐式转换类型 'System.Linq.IQueryable'到'System.DateTime?'
DateTime? logdate = from userlog in
(from userlog in db.UserLogEntities
where
userlog.UserID == 1 &&
userlog.Action == "Logon" &&
userlog.ActionTag == "Success"
select new
{
userlog.LogDate,
Dummy = "x"
})
group userlog by new { userlog.Dummy } into g
select new
{
Column1 = (DateTime?)g.Max(p => p.LogDate)
};
答案 0 :(得分:8)
以下是我的想法。如果有更好的方法,请告诉我。
LastLogin = (from ul in db.UserLogEntities
where ul.UserID == u.UserID &&
ul.Action == "Logon" &&
ul.ActionTag == "Success"
select ul.LogDate).DefaultIfEmpty(DateTime.Now).Max()
答案 1 :(得分:1)
这也是一个可行的解决方案。但你也可以使用。这个解决方案因此您不需要聚合函数。
var user= (
from ul in db.UserLogEntities
where ul.UserID == u.UserID &&
ul.Action == "Logon" &&
ul.ActionTag == "Success"
orderby ul.LogDate descending
select ul.LogDate??DateTime.Now ).FirstOrDefault();
答案 2 :(得分:0)
这是因为您选择了日期列表。您应该在查询结尾使用FirstOrDefault()或SingleOrDefault(),如下所示
select new
{
Column1 = (DateTime?)g.Max(p => p.LogDate)
}.FirstOrDefault();
或者
select new
{
Column1 = (DateTime?)g.Max(p => p.LogDate)
}.SingleOrDefault();