你有没有试过在跳过和采取之前调用 fetch
var result = _repostitory.All<MediaFile>()
.Fetch(mf => mf.Tags)
.Skip(10)
.Take(10);
据我所知,NH 无法处理带有查询限制的连接急切加载(它与 SQL 而不是 NH 有关)。它可能与子选择一起使用。
**更新
考虑这个例子
TableA
-------------
Id|Value
-------------
1 |Value1
2 |Value2
3 |Value3
TableB
-------------------------
ChildId|ParentId|ChildValue
-------------------------
1 | 1|Value1
2 | 1|Value2
3 | 2|Value3
4 | 2|Value4
5 | 3|Value5
6 | 3|ValueA
7 | 3|ValueA
8 | 3|ValueA
SELECT * FROM TableA LEFT JOIN TableB ON TableA.Id = TableB.ParentId
Result
--------------------------------------
Id|Value |ChildId|ParentId|ChildValue
--------------------------------------
1 |Value1|1 | 1|Value1
1 |Value1|2 | 1|Value2
2 |Value1|3 | 2|Value3
2 |Value1|4 | 2|Value4
3 |Value1|5 | 3|Value5
3 |Value1|6 | 3|ValueA
3 |Value1|7 | 3|ValueA
3 |Value1|8 | 3|ValueA
SELECT TOP 2 * FROM TableA LEFT JOIN TableB ON TableA.Id = TableB.ParentId
Result
--------------------------------------
Id|Value |ChildId|ParentId|ChildValue
--------------------------------------
1 |Value1|1 | 1|Value1
1 |Value1|2 | 1|Value2
因此 .Take(2) 将返回一个带有两个孩子(Id 1)的对象。您想要返回前两个对象(Id 1,2)及其子对象的位置。