【问题标题】:Using multiple like clauses with dapper for paging in a query with SQL Server 2008 R2在 SQL Server 2008 R2 的查询中使用多个 like 子句和 dapper 进行分页
【发布时间】:2019-10-05 23:39:19
【问题描述】:

我使用 Dapper 在大表中进行分页查询。我使用的功能是这样的:

public List<WarehouseLine> GetPagedWarehouseLines(int pageNumber, int rowsPerPage, string criteria) //todo
{
    var query = @"SELECT *
                  FROM 
                      (SELECT 
                           *, 
                           ROW_NUMBER() OVER (ORDER BY ProductDescr) AS RowNum 
                       FROM 
                           WarehouseLine) AS whl 
                  WHERE 
                      whl.RowNum BETWEEN ((@PageNumber - 1) * @RowsPerPage) + 1 AND @RowsPerPage * (@PageNumber) 
                      AND (@Criteria) 
                  ORDER BY ProductDescr";

    return _db.Query<WarehouseLine>(query, new { PageNumber = pageNumber, RowsPerPage = rowsPerPage, Criteria = criteria }).ToList();
}

条件变量是具有以下值的字符串

(Productdescr like '%%') OR (PartNumber like '%%') OR (SerialNumber like '%%') OR(Manufacturer like '%%') OR (SpecialInstructions like '%%') OR (UDF3 like '%%') OR (producttags like '%%') OR (NotesPerPart like '%%') 

除了括号,查询在 SQL Server Management Studio 中运行良好。但是在调试过程中,我收到以下错误:

在预期条件的上下文中指定的非布尔类型表达式,靠近“ORDER”。

我使用最新的稳定版 Dapper。

【问题讨论】:

    标签: c# sql sql-server-2008-r2 dapper


    【解决方案1】:

    'Criteria'变量是SQL表达式的一部分,不能作为SQL参数处理。

    var query = @"SELECT *
      FROM (
      SELECT *, 
      ROW_NUMBER() OVER (ORDER BY ProductDescr) AS RowNum 
      FROM WarehouseLine) AS whl 
      WHERE whl.RowNum BETWEEN ((@PageNumber-1)*@RowsPerPage)+1 
      AND @RowsPerPage*(@PageNumber) 
      AND " 
      + Criteria + 
      @"ORDER BY ProductDescr";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      相关资源
      最近更新 更多