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

ASP.NET Core Web API:如何使用Dapper实现日期区间筛选

解决方案

你的现有代码存在SQL语句不完整、查询方法使用错误、参数传递不符合需求等问题,以下是修改后的完整实现:

public async Task<List<Product>> GetByDateBetweenAsync(string fromDate, string toDate)
{
    // 构造SQL:将yyyymmdd格式字符串转为datetime,确保覆盖toDate当天所有时间点的数据
    var sql = @"SELECT ProductName, Unit, CostPrice, SellingPrice, CreatedDate 
                FROM Products 
                WHERE CreatedDate >= CONVERT(datetime, @fromDate, 112)
                  AND CreatedDate < DATEADD(day, 1, CONVERT(datetime, @toDate, 112))";

    using (var connection = new SqlConnection(configuration.GetConnectionString("DefaultConnection")))
    {
        // 使用QueryAsync获取结果集,而非单个实体
        var products = await connection.QueryAsync<Product>(sql, new { fromDate, toDate });
        return products.ToList();
    }
}

关键修改说明:

  • SQL逻辑修正:
    • 用CONVERT(datetime, @fromDate, 112)把yyyymmdd格式的字符串参数转为SQL Server支持的datetime类型(112是对应该格式的系统代码)。
    • 采用CreatedDate < DATEADD(day, 1, ...)替代<=,避免因时间精度问题遗漏当天23:59:59这类晚时段的记录。
  • 查询方法替换:将QuerySingleOrDefaultAsync改为QueryAsync<Product>,因为需要返回多个产品的列表,QueryAsync返回IEnumerable<Product>,最后转成List<Product>即可。
  • 参数传递:传入fromDate和toDate两个参数,与SQL中的变量一一对应。

额外提示:

  • 确保Product类的属性名称与数据库表字段完全匹配(大小写不敏感),Dapper会自动完成属性与字段的映射。
  • Dapper会自动处理连接的打开与关闭,手动调用connection.Open()也不会产生问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 23:01:24