
[英]Using async with Entity Framework select list of type IQueryable<T>
[英]What will trigger an Entity Framework IQueryable query, in a helper class that inherits List<T>?
public class PaginatedList<T> : List<T> {
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize) {
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int) Math.Ceiling(TotalCount / (double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage {
get {
return (PageIndex > 0);
}
}
public bool HasNextPage {
get {
return (PageIndex+1 < TotalPages);
}
}
}
是什么导致IQueryable延迟查询运行? 是因为AddRange接受IEnumerable吗? AddRange本身返回void。
是什么导致IQueryable延迟查询运行?
在内部, List<T>.AddRange
枚举IEnumerable
,这将导致查询执行。
如果要推迟执行该操作, 则必须重写AddRange
和大多数其他所有List<T>
成员以执行查询, 然后传递给基本实现。
我看不到推迟查询的好处。
我完全错过了Count
电话。 这将执行类似的查询(基本上是将原始查询包装在COUNT(*)
外部查询中),这也可能是一个问题。 如果查询非常复杂并且需要很长时间来执行计数,那么这也可能是性能问题的根源。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.