在继承 List<T> 的助手 class 中,什么会触发 Entity Framework IQueryable 查询?
What will trigger an Entity Framework IQueryable query, in a helper class that inherits List<T>?
这是我从 Nerd Dinner 和其他地方得到的,
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 本身 returns void.
What is causing the IQueryable deferred query to run?
在内部,List<T>.AddRange
枚举 IEnumerable
,这会导致查询执行。
如果你想推迟它,你必须覆盖 AddRange
和大多数其他 List<T>
成员 来执行查询,然后 传递到基础实现。
我看不到延迟查询的好处。
编辑
我完全错过了 Count
电话。这将执行一个 similar 查询(基本上是包装在 COUNT(*)
外部查询中的原始查询),这也可能是一个问题。如果查询非常复杂并且执行计数需要很长时间,这也可能是性能问题的根源。
这是我从 Nerd Dinner 和其他地方得到的,
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 本身 returns void.
What is causing the IQueryable deferred query to run?
在内部,List<T>.AddRange
枚举 IEnumerable
,这会导致查询执行。
如果你想推迟它,你必须覆盖 AddRange
和大多数其他 List<T>
成员 来执行查询,然后 传递到基础实现。
我看不到延迟查询的好处。
编辑
我完全错过了 Count
电话。这将执行一个 similar 查询(基本上是包装在 COUNT(*)
外部查询中的原始查询),这也可能是一个问题。如果查询非常复杂并且执行计数需要很长时间,这也可能是性能问题的根源。