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 < )
{
throw new ArgumentException(Messages.exception_InvalidPageIndex);
} if (pageSize <= )
{
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 - ) * pageSize)
.Take(pageSize)
.ToList()
:
this.DataContext.Set<T>()
.Where(filter)
.OrderByDescending(orderByExpression)
.Skip((pageIndex - ) * 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 = ;
if (RecordCount > && PageSize > )
{ int temp = RecordCount % PageSize;
pages = RecordCount / PageSize;
if (temp > )
{
return pages + ;
}
} 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);
}
EF迁移:
PM> Enable-Migrations -EnableAutomaticMigrations
PM> Add-Migration InitialCreate
PM> Update-Database -Verbose
EF下泛型分页方法,更新方法的更多相关文章
- iOS系统弃用方法更新方法
-boundingRectWithSize:options:attributes:context:用法 - (CGSize)sizeWithFont:(UIFont *)font constraine ...
- [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器
前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...
- Linux下tail命令的使用方法
Linux下tail命令的使用方法: linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,ta ...
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...
- svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录
svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...
- Linux下Git和GitHub使用方法总结
来源:Linux下Git和GitHub使用方法总结 1 Linux下Git和GitHub环境的搭建 第一步: 安装Git,使用命令 “sudo apt-get install git” 第二步: 到G ...
- LoadRunner参数更新方法和数据分配
参数化的定义:使用指定的数据源中的值来替换脚本录制生成的语句中的参数. 对Vuser脚本进行参数化的好处: 1.减小脚本的大小 2.提供了使用不同的脚本的值执行脚本的能力 参数化涉及两个任务: 1.用 ...
- Ubuntu下deb包的安装方法 (zz)
Ubuntu下deb包的安装方法 分类: Ubuntu10使用技巧 2010-10-11 23:49 42969人阅读 评论(3) 收藏 举报 ubuntudebdebianlinux deb是deb ...
- ubuntu下deb包的安装方法
ubuntu下deb包的安装方法 简介 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...
随机推荐
- openstack security group and rules python api use
nova和neutron都可以,但是感觉还是用neutron好. import neutronclient.v2_0.client as neclient neutron = neclient.Cli ...
- Flex各类型坐标转换(全局、本地、内容坐标间转换)
Flex包含3种坐标:全局坐标.本地坐标.内容坐标 全局坐标:stage级别,坐标原点为舞台的左上角,如MouseEvent的stageX.stageY坐标. 本地坐标:组件级别的坐标系,相对坐标,坐 ...
- Java Se :线性表
Java的集合框架分为两个系列,Collection和Map系列.在大学期间,学习数据结构时,好像学习了线性表.非线性表.树,哎,都给忘了.其实,在Collection系列内部又可以分为线性表.集合两 ...
- 编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
package com.hanqi.test; //银行账号 public class account { private String zhanghao;//账号 //私有余额 private do ...
- 使用 xtrabackup 进行MySQL数据库物理备份
0. xtrabackup的功能 能实现的功能: 非阻塞备份innodb等事务引擎数据库. 备份myisam表会阻塞(需要锁). 支持全备.增量备份.压缩备份. 快速增量备份(xtradb,原理类似于 ...
- SQL Server 2008 R2——VC++ ADO 操作 重复利用_ParameterPtr
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- MongoDB Sharding、库、collection设计学习汇总
sharding设计须考虑的几个因素 Sharding Key的选择 在片键的选择上,最好是能够在字段中选择混合型的片键,大范围的递增健.和随机分布的健组合,如按月份递增.按用户名 ...
- Sybase PowerDesign 导入数据库结构formSqlserver
采用Sybase PD 创建数据库设计是常见的方法,如果遇到链接数据源时,无法直接链接系统数据源,而且在Sybase PD中无法直接创建odbc数据源时, 可以到控制面板中创建数据源,一步步的网络上有 ...
- 使用VIM插件ctags来阅读C代码
说明 Ctags是vim下方便代码阅读的工具.尽管ctags也可以支持其它编辑器,但是它正式支持的只有vim.并且vim中已经默认安装ctags,它可以帮助程序员很容易地浏览源代码:ctags最先是用 ...
- 成为 Linux 终端高手的七种武器 之七 条件执行&&
7.条件执行 Bash 也可以连续执行两条命令。 第二条命令仅在第一条命令成功执行后才会开始执行。如要如此,你可以通过键入“&&”,也就是两个“&”字符进行分隔,在同一行输入两 ...