如何在不检索所有行的情况下使用 Entity Framework Core 3.0 实现组分页?

问题描述

当需要先对输入数据进行分组时,您将如何实现分页?我从以下链接了解如何实现分页

LINQ and pagination

,但我希望能够做到这一点,其中分页列表中的每个项目都是输入数据中的一个组(可以扩展)。类似于下面的代码 - 为了防止将表的所有行检索到内存中,ordersList 是 IQueryable。返回的 IQueryable 是我想传递给分页函数内容

from order in ordersList
group order by order.FullName into customers
select customers

但是,像这样的查询在客户端上运行(并且实际上在 Entity Framework Core 3.0+ 中引发异常)。对于这种情况,有没有办法只检索当前页面上的项目?

解决方法

您必须按组分页。您应该使用 group number 而不是 page number

//group sequence
int groupSeq = 1;

//select current group
var p = (from order in context.TBLGroups
       group order by order.FullName into customers
       select customers.Key).OrderBy(a => a).Skip(groupSeq - 1).Take(1).FirstOrDefault();
       string FullName = p.ToString();

//get all items in current group
var items = (from order in context.TBLGroups
       where order.FullName == FullName
       select order).ToList();
,

您必须检索有限的数据,然后在客户端进行分组:

              <table id="myTable"  class="gridview">
                <thead>
                <tr>
                    <th>Title</th>
                     <th>Edition</th>
                </tr>
                </thead>
                <tbody>
                {% for book in page_obj %}
                <tr class="text_data selected_grey">
                    <td id="book_title">{{ book.title }}</td>
                    <td>{{ book.edition }}</td>
                </tr>
                {% endfor %}
                </tbody>
            </table>


    <script>
        $(document).ready(function() {
            $(".text_data td").on("click",function() {
    var tr = $(this).parent();
    if(tr.hasClass("selected")) {
        tr.removeClass("selected");
    } else {
        tr.addClass("selected");
    }
});
          
            var elements= document.getElementsByTagName('tr');
            for(var j=0; j<elements.length;j++)
{
    (elements)[j].addEventListener("click",function(){
        alert(this.innerHTML); //now this one works,but show the whole row,I only want the first 
            var title = this.innerHTML.getElementById("book_title");

    alert(title); //this is what I want,but it does no work now
    });
}
        });

 </script>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...