自己编写的 entity framwork 6 通用 dal 类 增删改查 多分类字段
2014-05-06 17:38
405 查看
其中多分类字段参考:/article/7152292.html
public class BaseDAL<T> where T : class,new() { string strConn = ""; public BaseDAL(string connString) { strConn = connString; } /// <summary> /// 新增 /// </summary> /// <param name="entity">实体</param> /// <returns>返回受影响行数</returns> public bool Add(T entity) { using (SysDb db = new SysDb(strConn)) { db.Entry<T>(entity).State = EntityState.Added; return db.SaveChanges() > 0; } } /// <summary> /// 修改 /// </summary> /// <param name="entity">实体</param> /// <returns>返回受影响行数</returns> public bool Update(T entity) { using (SysDb db = new SysDb(strConn)) { db.Set<T>().Attach(entity); db.Entry<T>(entity).State = EntityState.Modified; return db.SaveChanges() > 0; } } /// <summary> /// 删除 /// </summary> /// <param name="entity">实体</param> /// <returns>返回受影响行数</returns> public bool Delete(T entity) { using (SysDb db = new SysDb(strConn)) { db.Set<T>().Attach(entity); db.Entry<T>(entity).State = EntityState.Deleted; return db.SaveChanges() > 0; } } /// <summary> /// 根据条件删除 /// </summary> /// <param name="deleWhere">删除条件</param> /// <returns>返回受影响行数</returns> public bool DeleteByConditon(Expression<Func<T, bool>> deleWhere) { using (SysDb db = new SysDb(strConn)) { List<T> entitys = db.Set<T>().Where(deleWhere).ToList(); entitys.ForEach(m => db.Entry<T>(m).State = EntityState.Deleted); return db.SaveChanges() > 0; } } /// <summary> /// 查找单个 /// </summary> /// <param name="id">主键</param> /// <returns></returns> public T GetSingleById(int id) { using (SysDb db = new SysDb(strConn)) { return db.Set<T>().Find(id); } } /// <summary> /// 查找单个 /// </summary> /// <param name="seleWhere">查询条件</param> /// <returns></returns> public T GetSingle(Expression<Func<T, bool>> seleWhere) { using (SysDb db = new SysDb(strConn)) { return db.Set<T>().AsExpandable().FirstOrDefault(seleWhere); } } /// <summary> /// 获取所有实体集合 /// </summary> /// <returns></returns> public List<T> GetAll() { using (SysDb db = new SysDb(strConn)) { return db.Set<T>().AsExpandable().ToList<T>(); } } /// <summary> /// 获取所有实体集合(单个排序) /// </summary> /// <returns></returns> public List<T> GetAll<Tkey>(Expression<Func<T, Tkey>> orderWhere,bool isDesc) { using (SysDb db = new SysDb(strConn)) { return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).ToList<T>(); } } /// <summary> /// 获取所有实体集合(多个排序) /// </summary> /// <returns></returns> public List<T> GetAll(params OrderModelField[] orderByExpression) { using (SysDb db = new SysDb(strConn)) { return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).ToList(); } } /// <summary> /// 单个排序通用方法 /// </summary> /// <typeparam name="Tkey">排序字段</typeparam> /// <param name="data">要排序的数据</param> /// <param name="orderWhere">排序条件</param> /// <param name="isDesc">是否倒序</param> /// <returns>排序后的集合</returns> public IQueryable<T> CommonSort<Tkey>(IQueryable<T> data, Expression<Func<T, Tkey>> orderWhere, bool isDesc) { if (isDesc) { return data.OrderByDescending(orderWhere); } else { return data.OrderBy(orderWhere); } } /// <summary> /// 多个排序通用方法 /// </summary> /// <typeparam name="Tkey">排序字段</typeparam> /// <param name="data">要排序的数据</param> /// <param name="orderWhereAndIsDesc">字典集合(排序条件,是否倒序)</param> /// <returns>排序后的集合</returns> public IQueryable<T> CommonSort(IQueryable<T> data, params OrderModelField[] orderByExpression) { //创建表达式变量参数 var parameter = Expression.Parameter(typeof(T), "o"); if (orderByExpression != null && orderByExpression.Length > 0) { for (int i = 0; i < orderByExpression.Length; i++) { //根据属性名获取属性 var property = typeof(T).GetProperty(orderByExpression[i].PropertyName); //创建一个访问属性的表达式 var propertyAccess = Expression.MakeMemberAccess(parameter, property); var orderByExp = Expression.Lambda(propertyAccess, parameter); string OrderName = ""; if (i > 0) { OrderName = orderByExpression[i].IsDESC ? "ThenByDescending" : "ThenBy"; } else OrderName = orderByExpression[i].IsDESC ? "OrderByDescending" : "OrderBy"; MethodCallExpression resultExp = Expression.Call(typeof(Queryable), OrderName, new Type[] { typeof(T), property.PropertyType }, data.Expression, Expression.Quote(orderByExp)); data = data.Provider.CreateQuery<T>(resultExp); } } return data; } /// <summary> /// 根据条件查询实体集合 /// </summary> /// <param name="seleWhere">查询条件 lambel表达式</param> /// <returns></returns> public List<T> GetList(Expression<Func<T, bool>> seleWhere) { using (SysDb db = new SysDb(strConn)) { return db.Set<T>().AsExpandable().Where(seleWhere).ToList(); } } /// <summary> /// 根据条件查询实体集合(单个字段排序) /// </summary> /// <param name="seleWhere">查询条件 lambel表达式</param> /// <returns></returns> public List<T> GetList<Tkey>(Expression<Func<T, bool>> seleWhere, Expression<Func<T, Tkey>> orderWhere,bool isDesc) { using (SysDb db = new SysDb(strConn)) { return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere),orderWhere,isDesc).ToList(); } } /// <summary> /// 根据条件查询实体集合(多个字段排序) /// </summary> /// <param name="seleWhere">查询条件 lambel表达式</param> /// <returns></returns> public List<T> GetList(Expression<Func<T, bool>> seleWhere, params OrderModelField[] orderByExpression) { using (SysDb db = new SysDb(strConn)) { return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderByExpression).ToList(); } } /// <summary> /// 获取分页集合(无条件无排序) /// </summary> /// <returns></returns> public List<T> GetListPaged<Tkey>(int pageIndex, int pageSize, out int totalcount) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return db.Set<T>().AsExpandable().Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 获取分页集合(无条件单个排序) /// </summary> /// <returns></returns> public List<T> GetListPaged<Tkey>(int pageIndex, int pageSize, Expression<Func<T, Tkey>> orderWhere,bool isDesc,out int totalcount) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return CommonSort(db.Set<T>().AsExpandable(), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 获取分页集合(无条件多字段排序) /// </summary> /// <returns></returns> public List<T> GetListPaged(int pageIndex, int pageSize, out int totalcount, params OrderModelField[] orderByExpression) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return CommonSort(db.Set<T>().AsExpandable(), orderByExpression).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 获取分页集合(有条件无排序) /// </summary> /// <returns></returns> public List<T> GetListPaged<Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere,out int totalcount) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return db.Set<T>().AsExpandable().Where(seleWhere).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 获取分页集合(有条件单个排序) /// </summary> /// <returns></returns> public List<T> GetListPaged<Tkey>(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere, Expression<Func<T, Tkey>> orderWhere, bool isDesc, out int totalcount) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderWhere, isDesc).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 获取分页集合(有条件多字段排序) /// </summary> /// <returns></returns> public List<T> GetListPaged(int pageIndex, int pageSize, Expression<Func<T, bool>> seleWhere, out int totalcount,params OrderModelField[] orderModelFiled) { using (SysDb db = new SysDb(strConn)) { totalcount = db.Set<T>().AsExpandable().Where(seleWhere).Count();//获取总数 //需要增加AsExpandable(),否则查询的是所有数据到内存,然后再排序 AsExpandable是linqkit.dll中的方法 return CommonSort(db.Set<T>().AsExpandable().Where(seleWhere), orderModelFiled).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } } /// <summary> /// 增加rownum列 /// </summary> /// <param name="lsTemp"></param> /// <returns></returns> public List<T> AddRowNum(List<T> lsTemp) { if (typeof(T).GetProperty("RowNum") != null) { int i=0; foreach (var item in lsTemp) { typeof(T).GetProperty("RowNum").SetValue(item, i, null); i++; } } return lsTemp; } }
public struct OrderModelField { public string PropertyName { get; set; } public bool IsDESC { get; set; } }
相关文章推荐
- entity framework 6 自己编写的通用数据类
- C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络
- C# WINFORM 窗体执行ORACLE存储过程 进行增删改查 自己编写借助网络(二)
- C#通用DAO实现(一)自己开发中曾经编写的
- python3 自己编写了一个Mac下分类软件,每次只需要启动 terminal 终端就会自动分类。
- entity framework 6 自己编写的通用数据类
- 基于Ado.net Entity Framework 通过系统运行时动态编译实现数据表字段的增删
- USB/HID 上位机开发流程及注意事项-----/*自己编写*/
- 编写一个函数,递归遍历,实现无限分类(新浪)
- [恒泰医软研究院] Python dal_admin_filters 字段过滤不起作用的解决方案
- zoj水题分类(自己练习)
- 用C#打造自己的通用数据访问类库(续)
- 遗传算法与直接搜索工具箱学习笔记 二-----编写自己的目标函数
- 编写自己的Matcher与如何让编译器识别被mock的重载函数
- Infopath中,自己编写的ActiveX控件,为何不能绑定数据到XML属性节点
- 自己编写int 7ch中断实现loop指令在屏幕显示80个!
- 编写一个简单通用的makefile
- maven2之m2eclipse使用手册之四编写通用Dao实例(四)
- 手机软件分类(自己分)
- 将常见对象转换成json字符串【自己编写方法】