Евгений Колесников 1 anno fa
parent
commit
60d2209520
1 ha cambiato i file con 31 aggiunte e 7 eliminazioni
  1. 31 7
      articles/cs_pagination2.md

+ 31 - 7
articles/cs_pagination2.md

@@ -477,7 +477,7 @@ public IEnumerable<Product> productList {
     >Так как в SQL запросе теперь появляются условия (where), то в интерфейс добавляем методы для добавления и очистки списка условий:
     >
     >```cs
-    >private Dictionary<string, object> filters = new >Dictionary<string, object>();
+    >private Dictionary<string, object> filters = new Dictionary<string, object>();
     >public void addFilter(string name, string value)
     >{
     >    filters.Add(name, value);
@@ -532,6 +532,27 @@ public IEnumerable<Product> productList {
     }
     ```
 
+1. При использовании фильтров нужно учитывать, что количество записей, соответствующих фильтру меньше, чем количество записей в таблице. Т.е. мы должны учитывать фильтр и в методе _getProductCount_
+
+    ```cs
+    using (MySqlConnection db = new MySqlConnection(connectionString))
+    {
+        var builder = new SqlBuilder();
+        if (filters.Count > 0)
+        {
+            foreach (var item in filters)
+            {
+                builder.Where(item.Key, item.Value);
+            }
+        }
+        var template = builder.AddTemplate( 
+            "SELECT count(*) FROM ProductView /**where**/");
+        return db.QuerySingle<int>(
+            template.RawSql, 
+            template.Parameters);
+    }
+    ```
+
 ## Поиск
 
 >Пользователь должен иметь возможность искать конкретную продукцию, используя поисковую строку.
@@ -573,14 +594,17 @@ public IEnumerable<Product> productList {
 
     ```cs
     // ищем вхождение строки фильтра в названии и описании объекта без учета регистра
-    if (searchFilter != "")
-        res = res.Where(
-            p => p.Title.IndexOf(searchFilter, 
-                    StringComparison.OrdinalIgnoreCase) >= 0 ||
-                 p.Description?.IndexOf(searchFilter, 
-                    StringComparison.OrdinalIgnoreCase) >= 0
+    if (searchFilter.Length > 0)
+    {
+        Globals.dataProvider.addFilter(
+            //"(Title LIKE @search OR Description LIKE @search)",
+            "(Title LIKE @search)",
+            new { search = $"%{searchFilter}%" }
         );
+    }
     ```
+
+    Правильный вариант закомментирован, т.к. в нашем представлении (**ProductView**) нет поля _Description_. Необходимо переписать представление.
     
 ---