using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Linq.Expressions;
using System.Text;

namespace P04DAL
{
/// <summary>
/// 用户表 操作类
/// </summary>
public class User
{
/// <summary>
/// 数据上下文对象
/// </summary>
P05MODEL.LeaveWordBoradEntities db = new P05MODEL.LeaveWordBoradEntities();

//public User()
//{
// //Predicate<P05MODEL.User> a = delegate(P05MODEL.User u) { return u.uId == 1; };

// //this.DelBy(ab => ab.uId == 1);

// //P05MODEL.User u = new P05MODEL.User() { uId = 1, uLoginName = "asdfasdf" };
// //this.Modify(u, "uLoginName");

// //List<P05MODEL.User> list = this.GetListBy(u2 => u2.uId > 1 && u2.uIsDel == false);

// //List<P05MODEL.User> listSorted = this.GetListBy<int>(u3 => u3.uId > 1, u4 => u4.uId);
//}

#region 1.0 新增 实体 +int Add(P05MODEL.User model)
/// <summary>
/// 新增 实体
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int Add(P05MODEL.User model)
{
db.Users.Add(model);
return db.SaveChanges();//保存成功后,会将自增的id设置给 model的 主键属性,并返回受影响行数
}
#endregion

#region 2。0 根据 用户 id 删除 +int Del(int uId)
/// <summary>
/// 根据 用户 id 删除
/// </summary>
/// <param name="uId"></param>
/// <returns></returns>
public int Del(int uId)
{
P05MODEL.User usr = new P05MODEL.User() { uId = uId };
db.Users.Attach(usr);
db.Users.Remove(usr);
return db.SaveChanges();
}
#endregion

#region 3.0 根据条件删除 +int DelBy(Expression<Func<P05MODEL.User, bool>> delWhere)
/// <summary>
/// 3.0 根据条件删除
/// </summary>
/// <param name="delWhere"></param>
/// <returns></returns>
public int DelBy(Expression<Func<P05MODEL.User, bool>> delWhere)
{
List<P05MODEL.User> listDeleting = db.Users.Where(delWhere).ToList();
listDeleting.ForEach(u => db.Users.Remove(u));
return db.SaveChanges();
}
#endregion

#region 4.0 修改 +int Modify(P05MODEL.User model, params string[] proNames)
/// <summary>
/// 4.0 修改,如:
/// P05MODEL.User u = new P05MODEL.User() { uId = 1, uLoginName = "asdfasdf" };
/// this.Modify(u, "uLoginName");
/// </summary>
/// <param name="model">要修改的实体对象</param>
/// <param name="proNames">要修改的 属性 名称</param>
/// <returns></returns>
public int Modify(P05MODEL.User model, params string[] proNames)
{
DbEntityEntry entry = db.Entry<P05MODEL.User>(model);
entry.State = System.Data.EntityState.Unchanged;
foreach (string proName in proNames)
{
entry.Property(proName).IsModified = true;
}
return db.SaveChanges();
}
#endregion

#region 5.0 根据条件查询 +List<P05MODEL.User> GetListBy(Expression<Func<P05MODEL.User,bool>> whereLambda)
/// <summary>
/// 5.0 根据条件查询 +List<P05MODEL.User> GetListBy(Expression<Func<P05MODEL.User,bool>> whereLambda)
/// </summary>
/// <param name="whereLambda"></param>
/// <returns></returns>
public List<P05MODEL.User> GetListBy(Expression<Func<P05MODEL.User, bool>> whereLambda)
{

return db.Users.Where(whereLambda).ToList();

}
#endregion

#region 5.1 根据条件 排序 和查询 + List<P05MODEL.User> GetListBy<TKey>
/// <summary>
/// 5.1 根据条件 排序 和查询
/// </summary>
/// <typeparam name="TKey">排序字段类型</typeparam>
/// <param name="whereLambda">查询条件 lambda表达式</param>
/// <param name="orderLambda">排序条件 lambda表达式</param>
/// <returns></returns>
public List<P05MODEL.User> GetListBy<TKey>(Expression<Func<P05MODEL.User, bool>> whereLambda, Expression<Func<P05MODEL.User, TKey>> orderLambda)
{
return db.Users.Where(whereLambda).OrderBy(orderLambda).ToList();
}
#endregion

#region 6.0 分页查询 + List<P05MODEL.User> GetPagedList<TKey>
/// <summary>
/// 6.0 分页查询 + List<P05MODEL.User> GetPagedList<TKey>
/// </summary>
/// <param name="pageIndex">页码</param>
/// <param name="pageSize">页容量</param>
/// <param name="whereLambda">条件 lambda表达式</param>
/// <param name="orderBy">排序 lambda表达式</param>
/// <returns></returns>
public List<P05MODEL.User> GetPagedList<TKey>(int pageIndex, int pageSize, Expression<Func<P05MODEL.User, bool>> whereLambda, Expression<Func<P05MODEL.User, TKey>> orderBy)
{
return db.Users.Where(whereLambda).OrderBy(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList();
}
#endregion
}

}

基类的参考Expression能传一个lambda表达式的更多相关文章

  1. 一个 lambda 表达式引起的思考

    一个 lambda表达式 引起的思考 fun = [lambda x: x*i for i in range(4)] for item in fun:    print(item(1)) 全文都是抄来 ...

  2. WPF MVVM 写一个健壮的INotifyPropertyChanged基类

    当我们用MVVM的时候要实现INotifyPropertyChanged,如果你是基于.net4.5以下的framework(.net4.5已有新特性我这里就不说了) 你很可能会这么写 public ...

  3. C# Array 基本数据类型数组的基类 传参问题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  4. [theWord] 一种英文字典的基类设计

    theWord --- 一种英文字典的基类设计 使用场景 想写一个应用,来记录自己背单词时候,对每个单词的记忆状况之类的东西.至于为什么做这个,试过了一些背单词软件,并不觉得好用,自己做一个吧. 那么 ...

  5. 关于Java中基类构造器的调用问题

    在<Java编程思想>第7章复用类中有这样一段话,值得深思.当子类继承了父类时,就涉及到了基类和导出类(子类)这两个类.从外部来看,导出类就像是一个与基类具有相同接口的新类,或许还会有一些 ...

  6. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

  7. C++_派生类的构造函数及派生类和基类之间的特殊关系

    派生类和基类的概念及派生类构造函数的原理: 创建一个叫做TableTennisPlayer的基类,记录会员的名字和是否有球桌. //声明一个基类 class TableTennisPlayer { p ...

  8. WPF 窗体基类实现的体验及实现回车到下一控件

    原文:WPF 窗体基类实现的体验及实现回车到下一控件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/jsyhello/article/details ...

  9. python3:iterable, iterator, generator,抽象基类, itertools的使用。

    目录: iterable对象 iterator对象, 数据类型Iterator类 数据类型Generator类. 生成器表达式 collections.abc:容器的抽象基类.用于判断具体类. ite ...

随机推荐

  1. node 安装express

    环境:win7 64位旗舰版 1 安装nodejs 2 安装npm 3 安装express 重点介绍安装express,前提是你已经安装nodejs和npm了. 1 安装express npm ins ...

  2. Javascript的性能瓶颈

    Javascript是单线程的,它的性能瓶颈在于频繁的DOM操作, 因为每次操作都会使浏览器重新绘制一次. 其实纯JS的执行的速度是很快的,可以把元素都攒到一块,一次性放到页面中. 或者,定义一个延时 ...

  3. JAVA加密

    [源地址http://www.iteye.com/topic/1122076/] 加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信 ...

  4. LFS,编译自己的Linux系统 - 包和补丁

    建立工作目录 我们先建立一个工作目录,用于存放下载的源代码和对源代码进行编译. sudo mkdir –v /mnt/lfs/sources sudo chmod –v a+wt /mnt/lfs/s ...

  5. android的编译和运行过程深入分析

    android的编译和运行过程深入分析 作者: 字体:[增加 减小] 类型:转载 首先来看一下使用Java语言编写的Android应用程序从源码到安装包的整个过程,此过程对了解android的编译和运 ...

  6. FPGA系统中DRAM,SRAM,SDRAM,FLASH 区别(转)

    原文:http://hi.baidu.com/abners/item/a9042ef35d3f005bc8f337f5 一般来说这几种存储器是一个nios系统都具有的,sram的好处是接口简单,速度快 ...

  7. 开源C/C++网络库比较

    在开源的C/C++网络库中, 常用的就那么几个, 在业界知名度最高的, 应该是ACE了, 不过是个重量级的大家伙, 轻量级的有libevent, libev, 还有 Boost的ASIO. ACE是一 ...

  8. Silverlight 结合ArcGis 使用inforwindow

    原文 http://www.dotblogs.com.tw/justforgood/archive/2012/05/10/72089.aspx 也许有些人不知道什么事inforwindow,简单来说就 ...

  9. Linux系统编程(24)——信号的生命周期

    信号生命周期为从信号发送到信号处理函数的执行完毕. 对于一个完整的信号生命周期(从信号发送到相应的处理函数执行完毕)来说,可以分为三个重要的阶段,这三个阶段由四个重要事件来刻画:信号诞生:信号在进程中 ...

  10. python使用get在百度搜索并保存第一页搜索结果

    python使用get在百度搜索并保存第一页搜索结果 作者:vpoet mail:vpoet_sir@163.com 注:随意copy,不用在意我的感受 #coding:utf-8 import ur ...