我有两张 table :
User
-----------------
ID int
Name varchar
UserStatus
-----------------
ID int
UserId int
Status varchar
ActiveDate datetime
EndDate datetime
在 C# 中使用 Linq 如何在最大事件日期和结束日期为空之前从用户表和用户状态表中获取所有信息?
我知道以下内容行不通,但这是我正在尝试做的一个基本示例。
ctx.Users.Include("UserStatus").Where(s => s.UserStatus.Max(t => t.ActiveDate) & s.UserStatus.EndDate != null).OrderBy(s => s.Name)
谢谢
编辑
假设用户表具有以下内容:
1 Billy Bob
2 Bilbo baggins
并且用户状态表有:
1 1 Active 1/1/2011 null
2 1 Reserved 1/1/2011 3/5/2011
3 2 Active 2/22/2011 null
我想要以下结果:
1 Billy Bob Active 1/1/2011
2 Bilbo Baggins Active 2/22/2011
最佳答案
尝试分两部分进行。首先,分组并设置最大值(使用 let
关键字),然后使用该值进行比较,最后选择您的对象。
var query = (from user in ctx.Users
join userStatus in ctx.UserStatuses on user.ID equals userStatus.User.ID
where userStatus.EndDate == null
group userStatus by new
{
userStatus.User.ID,
userStatus.ActiveDate
} into userGroup
let maxActiveDate = userGroup.Max(x => x.ActiveDate)
from userStatus in userGroup
where userStatus.ActiveDate == maxActiveDate
select new
{
userStatus.User.ID,
userStatus.User.Name,
userStatus.Status,
userStatus.ActiveDate
});
关于C# Linq 选择两个表从一个表中选择 MAX 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6112230/