如何解决如何在不检索所有行的情况下使用 Entity Framework Core 3.0 实现组分页?
当需要先对输入数据进行分组时,您将如何实现分页?我从以下链接了解如何实现分页:
,但我希望能够做到这一点,其中分页列表中的每个项目都是输入数据中的一个组(可以扩展)。类似于下面的代码 - 为了防止将表的所有行检索到内存中,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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。