/// <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下泛型分页方法,更新方法的更多相关文章

  1. iOS系统弃用方法更新方法

    -boundingRectWithSize:options:attributes:context:用法 - (CGSize)sizeWithFont:(UIFont *)font constraine ...

  2. [读书笔记]C#学习笔记四: C#2.0泛型 可控类型 匿名方法和迭代器

    前言 C#1.0的委托特性使方法作为其他方法的参数来传递,而C#2.0 中提出的泛型特性则使类型可以被参数化,从而不必再为不同的类型提供特殊版本的实现方法.另外C#2.0还提出了可空类型,匿名方法和迭 ...

  3. Linux下tail命令的使用方法

    Linux下tail命令的使用方法: linux tail命令用途是依照要求将指定的文件的最后部分输出到标准设备,通常是终端,通俗讲来,就是把某个档案文件的最后几行显示到终端上,假设该档案有更新,ta ...

  4. 低功耗蓝牙BLE之连接事件、连接参数和更新方法

    转自:http://blog.csdn.net/zzfenglin/article/details/51304084 连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包.一个连接事件 ...

  5. svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

    svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...

  6. Linux下Git和GitHub使用方法总结

    来源:Linux下Git和GitHub使用方法总结 1 Linux下Git和GitHub环境的搭建 第一步: 安装Git,使用命令 “sudo apt-get install git” 第二步: 到G ...

  7. LoadRunner参数更新方法和数据分配

    参数化的定义:使用指定的数据源中的值来替换脚本录制生成的语句中的参数. 对Vuser脚本进行参数化的好处: 1.减小脚本的大小 2.提供了使用不同的脚本的值执行脚本的能力 参数化涉及两个任务: 1.用 ...

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

    Ubuntu下deb包的安装方法 分类: Ubuntu10使用技巧 2010-10-11 23:49 42969人阅读 评论(3) 收藏 举报 ubuntudebdebianlinux deb是deb ...

  9. ubuntu下deb包的安装方法

    ubuntu下deb包的安装方法 简介 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...

随机推荐

  1. 你离月薪30K还差哪些?

    这类标题的文章,是不是很熟悉?你是不是冲着标题进来的? 类似这样的标题党文章,你应该看过很多,多数是泛泛而谈,没啥用- 今天老徐跟大家用几个真实案例,聊点有用的- 看完之后,你至少知道自己的差距是哪些 ...

  2. Composer管理PHP包

    安装 Composer包含两大逻辑部分:一个是用来存储包,另一个是命令行应用程序,帮助你发现.下载.更新和分享代码. $ cd/path/to/my/project $ curl -s http:// ...

  3. mybatis oracle BLOB类型字段保存与读取

    一.BLOB字段 BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Character Large Object的所写.其中BLOB是用 ...

  4. 烂泥:Windows下安装与配置Nginx web服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 前几篇文章,我们使用nginx都是在linux环境下,今天由于工作的需要.需要在windows环境也使用nginx搭建web服务器. 下面记录下有关ng ...

  5. Bootstrap模态框(modal)垂直居中

    http://v3.bootcss.com/ 自己也试了改了几种方式也不容乐观,发现在窗口弹出之前是获取不到$(this).height()的值,本想着是用($(window).height()-$( ...

  6. Mac brew命令

    一.简介 Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件. 二.安装 ruby -e "$(curl -fsSL ht ...

  7. C# WebService动态调用

    前言 站在开发者的角度,WebService 技术确实是不再“时髦”.甚至很多人会说,我们不再用它.当然,为了使软件可以更简洁,更有层次,更易于实现缓存等机制,我是非常建议将 SOAP 转为 REST ...

  8. [转]How do I use variables in Oracle SQL Developer?

    本文转自:http://stackoverflow.com/questions/5653423/how-do-i-use-variables-in-oracle-sql-developer Below ...

  9. C#基础--基于POP3协议的邮件接收和基于STMP的邮件发送

    最近在用outlook同步邮件.对邮件协议有一点兴趣.于是就去收集了一些资料,学习了一下如何通过.net来实现邮件的收发.    一:SMTP协议  1.什么是SMTP协议:       SMTP目前 ...

  10. MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)

    无论在何处在什么地方,我们都或多或少的接触到数学知识.特别是在客户端中,从打开界面的那一刻起就有太多与数学扯上的关联,如打开窗口的大小,窗口的位置,窗口里面的元件对象,以及UI的坐标等等.而在进入游戏 ...