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采取跳过不采取尽可能多的的主要内容,如果未能解决你的问题,请参考以下文章

实体框架/Linq to SQL:跳过和采取

性能测试应用领域

Firebird rownum * 或 * linq 样式跳过并采取

在编译时跳过不兼容的库

exness:欧洲央行会议纪要,未来采取货币政策行动

采取有效云网络安全策略的5个基本步骤