C# Linq 选择两个表从一个表中选择 MAX 日期

标签 c# linq entity-framework

我有两张 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/

相关文章:

c# - NAudio PlaybackState 永不停止?

c# - 为什么 .NET Framework 会重载数组和 IEnumerable & params []?

c# - 两个富文本框的同步滚动 (C#)

c# - 保存字符串中的重复值

c# - 为什么这个Linq表达式比另一个表达式慢很多?

c# - Entity Framework 将日期时间转换为字符串

c# - 在 Entity Framework 中查询今天的记录

c# - Entity Framework Core SQLite - 在测试中模拟预加载

c# - 为什么 ICollection<>.Contains 会忽略我重写的 Equals 和 IEquatable<> 接口(interface)?

c# - 将具有多个 GroupBy 列的 SQL 查询转换为 LINQ