我在 C# 的实体框架中遇到了一些慢查询的问题。我创建了一个名为 Page 的扩展方法来处理分页,但是当我使用它时,查询变得非常慢。如果我只是做 .Skip(page.Value * pageSize.Value).Take(pageSize.Value) 而不是使用 Page 查询会快很多。我猜想使用 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;
}