Saya menggunakan Kriteria untuk mempercepat kueri, dan saya hampir sampai.
Menggunakan Kueri Berdasarkan Contoh untuk mencocokkan baris dalam tabel, menghapus baris duplikat dengan id yang sama, lalu membuat paginasi.
Tentu saja saya tidak dapat membuat halaman sampai saya menghapus baris duplikat, dan saya tidak tahu bagaimana melakukannya. Itu bisa dilakukan dalam SQL, tapi itu sesuai dengan kode yang lancar, ISQLQuery tidak mengembalikan objek 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;
}
Saran yang saya baca adalah menulis kueri SQL di NHibernate, tapi saya tidak bisa memikirkan cara mengonversi "ROW_NUMBER() yang bagus melalui partisi SQL". Saya ingin membuatnya berfungsi secara menyeluruh terlebih dahulu, kemudian membuatnya lebih elegan.
Saya ingin lonjakan produksi ini dan membuktikan kecepatan ~90%.