You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用LINQ查询对SQL Server时态表应用日期范围筛选?

如何使用LINQ查询对SQL Server时态表应用日期范围筛选?

看起来你已经把SQL Server时态表和EF Core的配置都搞定了,单个时间点的查询也跑通了,那咱们来聊聊怎么用LINQ实现日期范围的时态表筛选吧,分几种常见场景给你示例:

1. 查询某一特定时间点的地址状态(你正在用的场景,再明确下写法)

如果要获取指定ID的地址在某个精确时间点的状态,用TemporalAsOf方法即可:

public async Task<Address> GetAtDate(long id, DateTime targetDate)
{
    var address = await _context.Addresses
        .TemporalAsOf(targetDate) // 指定要查询的时间点
        .FirstOrDefaultAsync(a => a.Id == id);
    
    return address;
}

2. 查询某段时间范围内的所有地址版本

如果你想获取从startDate到endDate之间存在过的所有历史版本(包括这段时间内生效的当前版本),用TemporalBetween方法:

public async Task<List<Address>> GetAddressVersionsInRange(long id, DateTime startDate, DateTime endDate)
{
    var addressVersions = await _context.Addresses
        .TemporalBetween(startDate, endDate) // 筛选逻辑:ValidFrom <= endDate 且 ValidTo >= startDate
        .Where(a => a.Id == id)
        .ToListAsync();
    
    return addressVersions;
}

3. 查询从某个时间点到现在的所有版本

要是你需要查看某地址从startDate开始到当前的所有变更版本,用TemporalFrom方法:

public async Task<List<Address>> GetAddressVersionsSince(long id, DateTime startDate)
{
    var addressVersions = await _context.Addresses
        .TemporalFrom(startDate) // 筛选ValidFrom >= startDate的所有版本(包含当前生效版本)
        .Where(a => a.Id == id)
        .ToListAsync();
    
    return addressVersions;
}

4. 查询到某个时间点为止的所有历史版本

反过来,要是想获取某地址到endDate为止的所有历史版本(不含当前生效版本,除非当前版本在endDate前已失效),用TemporalTo方法:

public async Task<List<Address>> GetAddressVersionsUpTo(long id, DateTime endDate)
{
    var addressVersions = await _context.Addresses
        .TemporalTo(endDate) // 筛选ValidTo <= endDate的所有历史版本
        .Where(a => a.Id == id)
        .ToListAsync();
    
    return addressVersions;
}

几个实用注意点:

  • 这些TemporalXXX扩展方法是EF Core 3.0及以上版本针对SQL Server时态表提供的专属功能,确保你的EF Core版本达标
  • 你可以在查询里叠加其他筛选条件(比如Where(a => a.IsDeleted == false)),和普通LINQ查询的写法完全一致
  • 查询返回的Address实体会自动带上对应版本的ValidFrom和ValidTo值,直接就能看到该版本的生效时间范围

备注:内容来源于stack exchange,提问作者moptr matrio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.16 07:03:08