Использование нескольких одинаковых предложений с dapper для подкачки в запросе с SQL Server 2008 R2 - PullRequest
0 голосов
/ 06 октября 2019

Я использую 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.

1 Ответ

0 голосов
/ 06 октября 2019

Переменная «Критерии» является частью выражения 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";
...