Моето заобиколно решение
Успях да заобиколя този проблем. Не ме разбирайте погрешно тук. Все още не съм разрешил проблема с приоритета, но го смекчих.
Какво направих?
Това е кодът, който използвах, докато не получа отговор от Devart . Ако не могат да преодолеят този проблем, накрая ще трябва да използвам този код.
// get ordered list of IDs
List<int> ids = ctx.MyEntitySet
.Include(/* Related entity set that is needed in where clause */)
.Where(/* filter */)
.OrderByDescending(e => e.ChangedDate)
.Select(e => e.Id)
.ToList();
// get total count
int total = ids.Count;
if (total > 0)
{
// get a single page of results
List<MyEntity> result = ctx.MyEntitySet
.Include(/* related entity set (as described above) */)
.Include(/* additional entity set that's neede in end results */)
.Where(string.Format("it.Id in {{{0}}}", string.Join(",", ids.ConvertAll(id => id.ToString()).Skip(pageSize * currentPageIndex).Take(pageSize).ToArray())))
.OrderByDescending(e => e.ChangedOn)
.ToList();
}
Преди всичко получавам поръчани идентификационни номера на моите юридически лица. Получаването само на идентификатори е добре работещо дори при по-голям набор от данни. MySql заявката е доста проста и се представя много добре. Във втората част разделям тези идентификатори и ги използвам, за да получа действителни екземпляри на обекти.
Като се замисля, това би трябвало да работи дори по-добре от начина, по който го правех в началото (както е описано във въпроса ми), защото получаването на общия брой е много много по-бързо поради опростената заявка. Втората част на практика е много подобна, с изключение на това, че моите обекти се връщат по-скоро от техните идентификатори, вместо да се разделят с помощта на Skip
и Take
...
Надяваме се, че някой може да намери това решение за полезно.