NHibernate:db2400方言:方言不支持变量限制

NHibernate:db2400方言:方言不支持变量限制,nhibernate,Nhibernate,我正在与一个S#arp体系结构项目合作,该项目包括一些在过去工作过的数据库任务。具体而言: var principals = _principalTasks.GetAll().AsPagination(page, limit); 其中任务定义为: public IQueryable<Principal> GetAll() { return _principalRepository.FindAll().OrderBy(o => o.Princip

我正在与一个S#arp体系结构项目合作,该项目包括一些在过去工作过的数据库任务。具体而言:

var principals = _principalTasks.GetAll().AsPagination(page, limit);
其中任务定义为:

    public IQueryable<Principal> GetAll()
    {
        return _principalRepository.FindAll().OrderBy(o => o.PrincipalName.ToLower());
    }
看起来SQLGenerator坚持参数化skip和take参数,而这种方言不支持这些参数

有办法解决这个问题吗?还是这是一个NHibernate bug

编辑:

顺便说一句,这是NHibernate.Linq.DefaultQueryProvider调用中的表达式调试字符串:

.Call System.Linq.Queryable.Take(
    .Call System.Linq.Queryable.Skip(
        .Call System.Linq.Queryable.OrderBy(
            .Constant<NHibernate.Linq.NhQueryable`1[SolutionExample.Domain.Principal]>(NHibernate.Linq.NhQueryable`1[SolutionExample.Domain.Principal]),
            '(.Lambda #Lambda1<System.Func`2[SolutionExample.Domain.Principal,System.String]>)),
        0),
    25)

.Lambda #Lambda1<System.Func`2[SolutionExample.Domain.Principal,System.String]>(SolutionExample.Domain.Principal $o) {
    .Call ($o.PrincipalName).ToLower()
}
.Call System.Linq.Queryable.Take(
.Call System.Linq.Queryable.Skip(
.Call System.Linq.Queryable.OrderBy(
.Constant(NHibernate.Linq.NhQueryable`1[SolutionExample.Domain.Principal]),
"(Lambda#Lambda1),,
0),
25)
.Lambda#Lambda1(SolutionExample.Domain.Principal$o){
.Call($o.PrincipalName).ToLower()
}

经过大量研究,我决定,尽管我可以通过创建自己的自定义方言来实现,或者扩展现有的db2400方言来实现,来解决这个问题-

public SqlString GetLimitString(SqlString queryString, int? offset, int? limit, Parameter offsetParameter, Parameter limitParameter)
这是毫无意义的,因为iSeries允许对

... FETCH FIRST n ROWS ONLY

语法,它没有用于执行偏移的等效语法。。。因此,修复碎片没有多大意义。

我只是因为试图设置一个测试台而受到了影响。我花了一段时间才弄明白你在问答中说了什么。在花了几个小时左右的时间逐步完成调试器和其他一切之后,我终于明白了你的意思。不过,这似乎只是使用linq提供程序的一个问题(这对我来说很不幸,因为使用linq是我练习的重点)。
... FETCH FIRST n ROWS ONLY