Noc*_*las 5 c# linq extension-methods entity-framework
我在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();
Run Code Online (Sandbox Code Playgroud)
扩展方法:
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;
}
Run Code Online (Sandbox Code Playgroud)
小智 10
您的扩展方法应该超过IQueryable,以便EF可以处理表达式并使用分页生成SQL查询.
由于您使用的是IEnumerable,因此Page方法将调用Skip和Take of IEnumerable.这将导致枚举构建到该点的查询结果(在调用Page之前)并在内存中对所有返回的项进行分页,而不是在数据库查询中包括分页.
归档时间: |
|
查看次数: |
1793 次 |
最近记录: |