EF下泛型分页方法,更新方法

/// <summary>
        /// 获取分页的分页集合
        /// </summary>
        /// <typeparam name="S">实体类型</typeparam>
        /// <param name="filter">过滤,条件</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="pageSize">每页记录数</param>
        /// <param name="orderByExpression">排序</param>
        /// <param name="ascending">是否排序</param>
        /// <returns>返回分页的分页集合</returns>
        public PagedResult<T> GetFilteredPageResult<S, T>(Expression<Func<T, bool>> filter, int pageIndex, int pageSize, Expression<Func<T, S>> orderByExpression, bool ascending) where T : class
        {
            int count = this.DataContext.Set<T>().Where(filter).Count();
            return new PagedResult<T>(
                pageIndex,
                pageSize,
                count,
                this.GetFilteredElements<S,T>(filter, pageIndex, pageSize, orderByExpression, ascending));
        }
/// <summary>
        /// 获取有条件的分页对象集合
        /// </summary>
        /// <typeparam name="S">实体类型</typeparam>
        /// <param name="filter">条件过滤</param>
        /// <param name="pageIndex">当前页</param>
        /// <param name="pageSize">每页记录数</param>
        /// <param name="orderByExpression">排序,排序Func表达式</param>
        /// <param name="ascending">是否排序</param>
        /// <returns>返回有条件的分页对象集合</returns>
        public IEnumerable<T> GetFilteredElements<S, T>(Expression<Func<T, bool>> filter, int pageIndex, int pageSize, Expression<Func<T, S>> orderByExpression, bool ascending) where T : class
        {
            if (filter == (Expression<Func<T, bool>>)null)
            {
                throw new ArgumentNullException("filter", Messages.exception_FilterCannotBeNull);
            }

            if (pageIndex < 0)
            {
                throw new ArgumentException(Messages.exception_InvalidPageIndex);
            }

            if (pageSize <= 0)
            {
                throw new ArgumentException(Messages.exception_InvalidPageSize);
            }

            if (orderByExpression == (Expression<Func<T, S>>)null)
            {
                throw new ArgumentNullException("orderByExpression", Messages.exception_OrderByExpressionCannotBeNull);
            }

            return ascending
                ?
                    this.DataContext.Set<T>()
                    .Where(filter)
                    .OrderBy(orderByExpression)
                    .Skip((pageIndex - 1) * pageSize)
                    .Take(pageSize)
                    .ToList()
                :
                    this.DataContext.Set<T>()
                    .Where(filter)
                    .OrderByDescending(orderByExpression)
                    .Skip((pageIndex - 1) * pageSize)
                    .Take(pageSize)
                    .ToList();
        }

        /// <summary>
        /// 获取记录数
        /// </summary>
        /// <param name="filter">条件filter</param>
        /// <returns>返回记录数</returns>
        public int GetRecordCount<T>(Expression<Func<T, bool>> filter) where T : class
        {
            return this.DataContext.Set<T>().Where(filter).Count();
        }
public class PagedResult<TEntity>
    {
        /// <summary>
        /// 数据列表
        /// </summary>
        public IEnumerable<TEntity> List { get; private set; }

        /// <summary>
        /// 每页记录数
        /// </summary>
        public int PageSize { get; private set; }

        /// <summary>
        /// 页索引
        /// </summary>
        public int PageIndex { get; private set; }

        /// <summary>
        /// 总记录数
        /// </summary>
        public int RecordCount { get; private set; }

        /// <summary>
        /// 总页数
        /// </summary>
        public int TotalPages
        {
            get
            {
                int pages = 0;
                if (RecordCount > 0 && PageSize > 0)
                {

                    int temp = RecordCount % PageSize;
                    pages = RecordCount / PageSize;
                    if (temp > 0)
                    {
                        return pages + 1;
                    }
                }

                return pages;
            }
        }

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="pageIndex">页索引</param>
        /// <param name="pageSize">每页记录数</param>
        /// <param name="recordCount">总记录数</param>
        /// <param name="list">数据列表</param>
        public PagedResult(int pageIndex, int pageSize, int recordCount, IEnumerable<TEntity> list)
        {
            this.List = list;
            this.PageIndex = pageIndex;
            this.PageSize = pageSize;
            this.RecordCount = recordCount;
        }
    }

/// <summary>
/// 通过条件批量更新实体的部分值【异步更新】
/// </summary>
/// <param name="filterExpression">更新条件</param>
/// <param name="updateExpression">更新值</param>
public virtual void UpdateAsync<T>(Expression<Func<T, bool>> filterExpression, Expression<Func<T, T>> updateExpression) where T : class
{
DataContext.Set<T>().Where(filterExpression).UpdateAsync(updateExpression);
}

时间: 2024-08-02 23:22:31

EF下泛型分页方法,更新方法的相关文章

数据库有百万数据量的情况下,分页查询的方法及其优化方式

当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点. 下面简单说一下我知道的一些方法. 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明. 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大为varch

JS实现移动端下拉刷新更多分页请求功能方法2.0

本次2.0升级版为js实现移动端加载更多下拉刷新更多分页请求功能方法(数据一次请求,前端分页,适用于数据流量较少,数据量压力小的页面)同时新增loading组件,turnToTop组件. 本文原创非转载,如需转载请注明出处:http://www.cnblogs.com/A-QBlog/p/7068959.html 废话不多说,直接上代码: 1 ;(function (w, $) { 2 3 var loadmore = { 4 /*单页加载更多 通用方法 5 * 6 * @param callb

大数据量下的分页解决方法

最好的办法是利用sql语句进行分页,这样每次查询出的结果集中就只包含某页的数据内容.再sql语句无法实现分页的情况下,可以考虑对大的结果集通过游标定位方式来获取某页的数据. sql语句分页,不同的数据库下的分页方案各不一样,下面是主流的三种数据库的分页sql: sql server: String sql = "select top " + pageSize + " * from students where id not in" + "(select t

织梦(dedecms)后台删除文章后台还有分页显示解决方法

鸡哥今天在给单位改一个织梦网站的时候发现了一个问题,由于本来的程序有7000多篇文章,鸡哥就直接执行了个sql语句给删除了,但是发现删除之后后台文章的分页还在显示着,错误截图给大家看看 看到没,经过鸡哥百度搜索发现这其实并不是鸡哥的操作问题,而是这本就是织梦5.7的一个bug,下边就给大家写下修复方法很简单: 先找到你的根目录中/dede/content_list.php这个文件打开找到 这段代码,可以直接搜索缓存处理就能找到 把红框中的代码修改为: $arr = $dsql->GetOne(&qu

Linux下tail命令的使用方法

Linux下tail命令的使用方法.linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,tail会自己主动刷新,确保你看到最新的档案内容.一.tail命令语法tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]参数解释:-f 该参数用于监视File文件增长.-c Number 从

sqlserver2005使用row_number() over分页的实现方法

sqlserver2005使用row_number() over分页的实现方法 sqlserver2005使用row_number() over分页的实现方法,需要的朋友可以参考下. 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例子: select * from (  select *, ROW_NUMBER() OVER(Order by a.CreateTime DESC ) AS RowNumber fro

Ubuntu下deb包的安装方法 (zz)

Ubuntu下deb包的安装方法 分类: Ubuntu10使用技巧 2010-10-11 23:49 42969人阅读 评论(3) 收藏 举报 ubuntudebdebianlinux deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian的Linux发行版都使用dpkg,例如Ubu

Linux下Git和GitHub使用方法总结 (码云)

初学先记住这几条,其他慢慢研究. 下面讲如何用码云完成一个项目的提交, 我的步骤 https://git.oschina.net/phpervip/qianzhu(此例:一个企业模板): 先在码云上注册一个帐号. 然后新建项目,就有一个git地址. 本地进入你的项目目录. 初始化项目->建远程连接->获取项目->添加版本->版本提交->远程提交 git init git remote add origin https://git.oschina.net/phpervip/qi

【转】Ubuntu下deb包的安装方法

[转]Ubuntu下deb包的安装方法 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu.Knoppix 等.以下是一些 Dpkg 的普通用法: 1.dpkg -i <package.deb>安装一个 Debian 软件包,如