nhibernate采取跳过不采取尽可能多的
Posted
技术标签:
【中文标题】nhibernate采取跳过不采取尽可能多的【英文标题】:nhibernate take skip not taking as much as it should 【发布时间】:2017-07-27 07:55:12 【问题描述】:我有这个代码
var items = query.Skip(0).Take(25).List();
我想要的是从我的列表中获得 25 个入口(列表有 402 个入口)。 打完这个电话后,我再也没有得到 25 个入口。有人知道为什么吗?
【问题讨论】:
【参考方案1】:.Take()
和 .Skip()
位于 DB 端(例如在 SQL Server 上 - Implement paging (skip / take) functionality with this query)转换为类似这样的内容
SELECT col1, col2, ...
FROM ...
WHERE ...
ORDER BY
OFFSET 0 ROWS -- skip 0 rows
FETCH NEXT 25 ROWS ONLY; -- take 25 rows
如果我们的 query
大约是一个 TABLE(无 JOIN),这将始终有效。 IE。那么多行将导致结果列表中有那么多 C# 项
但是如果查询使用 JOIN,加入一些集合,我们仍然会在 DB 端获得 25 行。
parent_id, child_id
1, 10
1, 11
2, 12
2, 13
...
-- 25 rows
但是这些会导致更少的根实体(参见父级 1 和 2 有 4 行)。这些将在转换过程中被简单地转换为只有少数父母,其中收集的项目数量非常不确定
我的建议是:
需要分页时不要加入集合。绝不。始终在与
star schema
(多对一)相关的联接上分页
【讨论】:
以上是关于nhibernate采取跳过不采取尽可能多的的主要内容,如果未能解决你的问题,请参考以下文章