ฉันใช้เกณฑ์เพื่อเร่งการค้นหา และเกือบจะสำเร็จแล้ว
การใช้ Query By Example เพื่อจับคู่แถวในตาราง ลบแถวที่ซ้ำกันด้วย 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;
}
คำแนะนำที่ฉันได้อ่านคือการเขียนแบบสอบถาม SQL ใน NHibernate แต่ฉันคิดไม่ออกว่าจะแปลง "ROW_NUMBER() ที่ดีเหนือพาร์ติชัน SQL" ได้อย่างไร ฉันอยากให้มันทำงานจนจบก่อนแล้วจึงทำให้มันดูหรูหรายิ่งขึ้น
ฉันต้องการให้การผลิตเพิ่มขึ้นอย่างรวดเร็วและพิสูจน์ความเร็วที่เพิ่มขึ้น ~90%