C#のEntityFrameworkでのクエリが遅いという問題があります。ページングを処理するためにPageという拡張メソッドを作成しましたが、これを使用するとクエリが非常に遅くなります。Pageを使用する代わりに.Skip(page.Value * pageSize.Value).Take(pageSize.Value)を実行すると、クエリがはるかに高速になります。Pageでそれを行うと、ページングする前にすべての連絡先がフェッチされると思います。これを防ぐ方法はありますか、それとも私は何か間違ったことをしていますか?
クエリ:
var contacts = db.Contacts
.Where(x => x.AccountID == accountID && x.Deleted == false)
.OrderByDescending(x => x.FirstName)
.ThenBy(x => x.LastName)
.ThenBy(x => x.CreatedDate)
.Page(page, pageSize);
return contacts.ToList();
拡張方法:
public static IEnumerable<T> Page<T>(this IEnumerable<T> elements, int? page, int? pageSize)
{
if (page.HasValue && pageSize.HasValue)
return elements.Skip(page.Value * pageSize.Value).Take(pageSize.Value);
else
return elements;
}