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 ...
随机推荐
- 你离月薪30K还差哪些?
这类标题的文章,是不是很熟悉?你是不是冲着标题进来的? 类似这样的标题党文章,你应该看过很多,多数是泛泛而谈,没啥用- 今天老徐跟大家用几个真实案例,聊点有用的- 看完之后,你至少知道自己的差距是哪些 ...
- Composer管理PHP包
安装 Composer包含两大逻辑部分:一个是用来存储包,另一个是命令行应用程序,帮助你发现.下载.更新和分享代码. $ cd/path/to/my/project $ curl -s http:// ...
- mybatis oracle BLOB类型字段保存与读取
一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...
- 烂泥:Windows下安装与配置Nginx web服务器
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关ng ...
- Bootstrap模态框(modal)垂直居中
http://v3.bootcss.com/ 自己也试了改了几种方式也不容乐观,发现在窗口弹出之前是获取不到$(this).height()的值,本想着是用($(window).height()-$( ...
- Mac brew命令
一.简介 Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件. 二.安装 ruby -e "$(curl -fsSL ht ...
- C# WebService动态调用
前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...
- [转]How do I use variables in Oracle SQL Developer?
本文转自:http://stackoverflow.com/questions/5653423/how-do-i-use-variables-in-oracle-sql-developer Below ...
- C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送
最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发. 一:SMTP协议 1.什么是SMTP协议: SMTP目前 ...
- MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
无论在何处在什么地方,我们都或多或少的接触到数学知识.特别是在客户端中,从打开界面的那一刻起就有太多与数学扯上的关联,如打开窗口的大小,窗口的位置,窗口里面的元件对象,以及UI的坐标等等.而在进入游戏 ...