查找LINQ查询连接中的最大日期
本文关键字:日期 LINQ 查询 连接 查找 | 更新日期: 2023-09-27 18:11:55
请原谅我对这个问题缺乏了解,因为这个问题很基本,但我有一个可空 [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
});
如果有人能帮助我,我会很感激的。
这是我试图为每个用户获取的"Login"表的最大值。
编辑:另一次尝试没有得到期望的结果:
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
});
如果您总是至少有一个连接行,按时间戳排序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
});
在linq中使用group by和Max
From p In db.Products _
Group p By p.CategoryID Into g = Group _
Select New With {g, .MaxPrice = g.Max(Function(p) p.UnitPrice)}