NHibernate Criteria QueryByExample在SQL中间卡住了

本文关键字:中间 SQL Criteria QueryByExample NHibernate | 更新日期: 2023-09-27 18:13:43

我正在使用Criteria来加速查询,我几乎就在那里了。

使用示例查询匹配表中的行,删除具有相同id的重复行,然后分页。

当然,我不能分页,直到我删除重复的行,我不知道怎么做。它可以在SQL中完成,但是它不适合流畅的代码,ISQLQuery不返回iccriteria对象。

    public IList<EntitySearch> CriteriaSearch(EntitySearch exampleEntitySearch, int startingPage, int pageSize)
    {
        var startRow = startingPage * pageSize;
        // Query By Example.
        var example = Example.Create(exampleEntitySearch)
            .IgnoreCase()
            .EnableLike(MatchMode.Anywhere)
            .ExcludeZeroes();
        var results = this.Session.CreateCriteria(typeof(EntitySearch))
                                .Add(example)
        // select * from (SELECT ROW_NUMBER()OVER (partition by Id order by Id) As rankOrder, * FROM EntitySearch) as original where original.rankOrder = 1
                                .SetFirstResult(startRow)
                                .SetMaxResults(pageSize)
                                .List<DealSearch>();
        return results;
    }

我读过的建议是在NHibernate中编写SQL查询,但我想不出如何转换漂亮的"ROW_NUMBER() over partition SQL"。我想先让它首尾相连,然后让它更优雅。

我想把这个峰值投入生产,并证明~90%的速度。

NHibernate Criteria QueryByExample在SQL中间卡住了

我不确定性能,但您可以使用LINQ:

改变:

.List<DealSearch>();

:

.List<DealSearch>().Distinct().ToList();