PagedList.Mvc返回表中的所有记录

科兹巴尔

我的通用存储库中具有以下功能。我的线路有两个问题var list = query.ToPagedList(pageNumber, pageSizeNumber);

public IEnumerable<T> GetPagedListDbContext(string searchFieldName, string searchText, string searchOperator, string sortFieldName, int? page, int? pageSize)
    {
        int pageSizeNumber = (pageSize ?? 20);
        int pageNumber = (page ?? 1);
        string sql = string.Empty;

        sql = string.Format("Select * From {0} q ", typeof(T).Name);
        switch (searchOperator)
        {
            case "Starts With":
                sql += string.Format("Where q.{0} like '{1}%' ", searchFieldName, searchText);
                break;
            case "Ends With":
                sql += string.Format("Where q.{0} like '%{1}' ", searchFieldName, searchText);
                break;
            case "Contains":
                sql += string.Format("Where q.{0} like '%{1}%' ", searchFieldName, searchText);
                break;
            case "Equal To":
                sql += string.Format("Where q.{0} == '{1}' ", searchFieldName, searchText);
                break;
            case "Not Equal To":
                sql += string.Format("Where q.{0} != '{1}' ", searchFieldName, searchText);
                break;
        }

            if (sortFieldName == null)
            {
                sql += "Order By q.Id ";
            }
            else
            {
                sql += string.Format("Order By q.{0} ", sortFieldName);
            }

            // RepoDbSet is DbSet
            DbSqlQuery<T> query = RepoDbSet.SqlQuery(sql);
            var list = query.ToPagedList(pageNumber, pageSizeNumber);

            return list;
        } 
  1. 它返回表中的所有记录。(下面的Sql跟踪)
  2. 它执行两次相同的查询。

    SQL跟踪事件类文本数据

    RPC:完整的exec sp_reset_connection

    SQL:BatchCompleted Select * From Book q按q.Id排序

    RPC:完整的exec sp_reset_connection

    SQL:BatchCompleted Select * From Book q按q.Id排序

    跟踪停止

问题:为什么不使用Skip执行查询Take(例如OFFSET 0 ROWS FETCH NEXT 20 ROWS ONLY)?

为什么要执行两次?

当我检查最后一行时,return list它的总计数为20,而不是表中的总行,并且不会再次命中数据库。它如何查询?

是否可以使用Linq执行相同的过程?

Akatakritos

在后台,ToPagedList将执行两项操作:

要获取记录的总数(要知道会有多少页):

query.Count()

要获取当前记录页面:

query.Skip((pageNumber - 1) * pageSize).Take(pageSize)

这些将导致您看到两个查询。

它将运行您的自定义串联SQL,创建对象的内存中集合,然后集合中的对象执行LINQ

这是了解LINQ的重要要点。如果该集合支持IQueryable,则该集合将传递一个表达式树,该树可以仔细地转换为适当的SQL。

如果仅支持IEnumerable,则对内存中的对象集合进行查询。

显然,DbSqlQuery没有实现IQueryable。

而不是连接SQL,您应该公开基础表对象(EntityFramework?Linq2Sql?什么ORM?),然后在该对象上运行查询:

var books = context.Books; //or whatever

var query = books.Where(b => b.Name == "Something");

// You can build up a query by chaining more operataions
// on to it
query = query.Where(b => b.PublishDate < DateTime.Today);

query = query.OrderBy(b => b.Id);

// Your ORM may be able to handle the StartsWith, EndsWith, 
// Contains string methods. Check its documentation.
query = query.Where(b => b.Name.StartsWith("The"))

// Since the query object implements IQueryable, it can translate into
// two appropriate SQL queries.
return query.ToPagedList(2, 50);

相关:返回IEnumerable <T>与IQueryable <T>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

pagedList 中的多个查询

来自分类Dev

PagedList MVC中的分页问题

来自分类Dev

Using automapper with PagedList.mvc

来自分类Dev

.NET MVC Linq分页与PagedList

来自分类Dev

PagedList ViewModel中的对象列表

来自分类Dev

具有实体框架的PagedList获取所有记录

来自分类Dev

如何在PagedList.Mvc中具有多个PagedListRenderOptions?

来自分类Dev

使用PagedList.Mvc时出错

来自分类Dev

PagedList MVC不包含PagedListPager的定义

来自分类Dev

mvc3 pagedlist背景选择

来自分类Dev

PagedList 中的空占位符是什么?

来自分类Dev

C#PagedList MVC在分页中添加#anchor

来自分类Dev

使用视图模型时,如何在mvc中实现pagedlist?

来自分类Dev

为了使pagedList返回到post操作,需要执行哪些操作?

来自分类Dev

PagedList.Mvc省略号按钮不起作用

来自分类Dev

MVC pagedlist日期在第二页上失去价值

来自分类Dev

PagedList MVC仅显示大于当前页码的页码

来自分类Dev

使用PagedList.MVC时无法使用强类型视图

来自分类Dev

MVC PagedList 动态页面/页面大小由模型决定

来自分类Dev

通过观察ViewModel在RecyclerView中搜索PagedList的LiveData

来自分类Dev

如何在PagedList分页器中更改分页文本

来自分类Dev

MutableLiveData 不会触发 loadAfter 使用 PagedList 从 Android ROM 中获取

来自分类Dev

如何向PagedList中的每个项目添加数据

来自分类Dev

使用AngularJs从PagedList(Web API)获取集合中所有元素的数量

来自分类Dev

MVC3中的PagedList显示错误对象引用未设置为对象的实例

来自分类Dev

PAGEDLIST可以保存当前URL吗?在ASP.net MVC4中

来自分类Dev

Linq查询联接两个表并从第一个表返回对象-使用的PagedList

来自分类Dev

Linq查询联接两个表并从第一个表返回对象-使用的PagedList

来自分类Dev

使用PagedList.mvc时如何在同一页面上保留/保留

Related 相关文章

  1. 1

    pagedList 中的多个查询

  2. 2

    PagedList MVC中的分页问题

  3. 3

    Using automapper with PagedList.mvc

  4. 4

    .NET MVC Linq分页与PagedList

  5. 5

    PagedList ViewModel中的对象列表

  6. 6

    具有实体框架的PagedList获取所有记录

  7. 7

    如何在PagedList.Mvc中具有多个PagedListRenderOptions?

  8. 8

    使用PagedList.Mvc时出错

  9. 9

    PagedList MVC不包含PagedListPager的定义

  10. 10

    mvc3 pagedlist背景选择

  11. 11

    PagedList 中的空占位符是什么?

  12. 12

    C#PagedList MVC在分页中添加#anchor

  13. 13

    使用视图模型时,如何在mvc中实现pagedlist?

  14. 14

    为了使pagedList返回到post操作,需要执行哪些操作?

  15. 15

    PagedList.Mvc省略号按钮不起作用

  16. 16

    MVC pagedlist日期在第二页上失去价值

  17. 17

    PagedList MVC仅显示大于当前页码的页码

  18. 18

    使用PagedList.MVC时无法使用强类型视图

  19. 19

    MVC PagedList 动态页面/页面大小由模型决定

  20. 20

    通过观察ViewModel在RecyclerView中搜索PagedList的LiveData

  21. 21

    如何在PagedList分页器中更改分页文本

  22. 22

    MutableLiveData 不会触发 loadAfter 使用 PagedList 从 Android ROM 中获取

  23. 23

    如何向PagedList中的每个项目添加数据

  24. 24

    使用AngularJs从PagedList(Web API)获取集合中所有元素的数量

  25. 25

    MVC3中的PagedList显示错误对象引用未设置为对象的实例

  26. 26

    PAGEDLIST可以保存当前URL吗?在ASP.net MVC4中

  27. 27

    Linq查询联接两个表并从第一个表返回对象-使用的PagedList

  28. 28

    Linq查询联接两个表并从第一个表返回对象-使用的PagedList

  29. 29

    使用PagedList.mvc时如何在同一页面上保留/保留

热门标签

归档