繁体   English   中英

在继承List的帮助器类中,什么将触发Entity Framework 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.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM