NHibernate Criteria QueryByExample在中间停留了SQL

zer*_*tor 5 c# nhibernate fluent-nhibernate query-by-example criteria-api

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

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

当然,除非删除重复的行,否则我无法分页,我不知道该怎么做.它可以在SQL中完成,但是它确实适用于流畅的代码,ISQLQuery不会返回ICriteria对象.

    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;
    }
Run Code Online (Sandbox Code Playgroud)

我读过的建议是在NHibernate中编写SQL查询,但我想不出如何在分区SQL上转换漂亮的"ROW_NUMBER()".我想让它首先工作到底,然后让它更优雅.

我希望将这个峰值投入生产并证明~90%加速.

小智 0

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

改变:

.List<DealSearch>();
Run Code Online (Sandbox Code Playgroud)

到:

.List<DealSearch>().Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)