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

LINQ to SQL按日期区间查询含时间戳数据的正确实现方法

解决方案

推荐方案(性能最优、无精度问题)

采用左闭右开区间的通用日期查询逻辑,兼容单天、跨天的所有查询场景:

SearchInvoicesNotSendToMydata(fromDateEdit.DateTime, toDateEdit.DateTime);

public List<Invoices> SearchInvoicesNotSendToMydata(DateTime fromDate, DateTime toDate)
{
    // 起始日期对齐到当日0点
    DateTime start = fromDate.Date;
    // 结束日期对齐到次日0点
    DateTime end = toDate.Date.AddDays(1);

    List<Invoices> invoices = db.Invoices
                                .Where(p => p.Date >= start && p.Date < end)
                                .ToList();

    return invoices;
}

该方案的优势:

  • 无精度遗漏:不需要手动拼接23:59:59,避免漏掉毫秒级时间的记录,完全覆盖当日所有时间范围
  • 性能优秀:查询条件直接作用于Date字段,不会给字段附加运算函数,数据库可正常命中Date字段的索引
  • 兼容性强:不管查询单天还是跨天日期区间,逻辑通用无需额外分支判断

可选方案(仅适合小数据量场景)

如果你使用EF框架,也可以通过截断字段时间部分实现,但该方案会对数据库字段附加函数运算,无法命中索引,数据量较大时性能较差:

// EF Core 写法
.Where(p => p.Date.Date >= fromDate.Date && p.Date.Date <= toDate.Date)

// EF6 写法(需引用System.Data.Entity命名空间)
.Where(p => DbFunctions.TruncateTime(p.Date) >= fromDate.Date && DbFunctions.TruncateTime(p.Date) <= toDate.Date)

内容的提问来源于stack exchange,提问作者rippergr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:04