Пример #1
0
        /// <summary>
        /// 多字段排序的指定字段的分页查询
        /// </summary>
        /// <typeparam name="TKey">实体对象的属性</typeparam>
        /// <typeparam name="TSelector">指定字段对象类型</typeparam>
        /// <param name="pageIndex">页数</param>
        /// <param name="pageSize">每页条数</param>
        /// <param name="rowCount">总条数</param>
        /// <param name="whereLambda">条件</param>
        /// <param name="orderLambdas">排序集合</param>
        /// <param name="selector">指定字段对象</param>
        /// <param name="isAscs">是否顺序集合</param>
        /// <returns>指定字段的数据集合</returns>
        public virtual List <TSelector> GetPagedList <TKey, TSelector>(int pageIndex, int pageSize, ref int rowCount, Expression <Func <T, bool> > whereLambda, IList <Expression <Func <T, TKey> > > orderLambdas, Expression <Func <T, TSelector> > selector, IList <bool> isAscs)
        {
            if (orderLambdas != null)
            {
                if (isAscs == null || orderLambdas.Count != isAscs.Count)
                {
                    throw new Exception("\"排序\"的数量必须和\"是否顺序\"的数量一致");
                }
            }

            bool isFirstOrder = true;

            using (db = new OracleEntities(connString))
            {
                var queryable = db.Set <T>().Where(whereLambda);
                rowCount = db.Set <T>().Where(whereLambda).Count();

                for (int i = 0; i < orderLambdas.Count; i++)
                {
                    var orderLambda = orderLambdas[i];
                    var isAsc       = isAscs[i];

                    if (isFirstOrder)
                    {
                        if (isAsc)
                        {
                            queryable = queryable.OrderBy(orderLambda);
                        }
                        else
                        {
                            queryable = queryable.OrderByDescending(orderLambda);
                        }

                        isFirstOrder = false;
                    }
                    else
                    {
                        if (isAsc)
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenBy(orderLambda);
                        }
                        else
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenByDescending(orderLambda);
                        }
                    }
                }

                return(queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().Select(selector).ToList());
            }
        }
Пример #2
0
 /// <summary>
 /// 获取满足条件并指定排序,指定条数,指定字段的数据集合
 /// </summary>
 /// <typeparam name="TKey">实体对象的属性</typeparam>
 /// <typeparam name="TSelector">指定字段对象类型</typeparam>
 /// <param name="top">条数</param>
 /// <param name="whereLambda">条件</param>
 /// <param name="orderLambda">排序</param>
 /// <param name="selector">指定字段对象</param>
 /// <param name="isAsc">是否顺序,默认值为true</param>
 /// <returns>指定字段的数据集合</returns>
 public virtual IList <TSelector> GetList <TKey, TSelector>(int top, Expression <Func <T, bool> > whereLambda, Expression <Func <T, TKey> > orderLambda, Expression <Func <T, TSelector> > selector, bool isAsc = true)
 {
     using (db = new OracleEntities(connString))
     {
         if (isAsc)
         {
             return(db.Set <T>().Where(whereLambda).OrderBy(orderLambda).Take(top).AsNoTracking().Select(selector).ToList());
         }
         else
         {
             return(db.Set <T>().Where(whereLambda).OrderByDescending(orderLambda).Take(top).AsNoTracking().Select(selector).ToList());
         }
     }
 }
Пример #3
0
 /// <summary>
 /// 通过条件和排序查找满足条件的第一个实体的指定字段数据
 /// </summary>
 /// <typeparam name="TKey">实体对象的属性</typeparam>
 /// <typeparam name="TSelector">指定字段对象类型</typeparam>
 /// <param name="whereLambda">条件</param>
 /// <param name="orderLambda">排序</param>
 /// <param name="selector">指定字段对象</param>
 /// <param name="isAsc">是否顺序,默认值为true</param>
 /// <returns>指定字段的数据对象</returns>
 public virtual TSelector Get <TKey, TSelector>(Expression <Func <T, bool> > whereLambda, Expression <Func <T, TKey> > orderLambda, Expression <Func <T, TSelector> > selector, bool isAsc = true)
 {
     using (db = new OracleEntities(connString))
     {
         if (isAsc)
         {
             return(db.Set <T>().Where(whereLambda).OrderBy(orderLambda).AsNoTracking().Select(selector).FirstOrDefault());
         }
         else
         {
             return(db.Set <T>().Where(whereLambda).OrderByDescending(orderLambda).AsNoTracking().Select(selector).FirstOrDefault());
         }
     }
 }
Пример #4
0
 /// <summary>
 /// 分页查询指定字段的数据集合
 /// </summary>
 /// <typeparam name="TKey">实体对象的属性</typeparam>
 /// <typeparam name="TSelector">指定字段对象类型</typeparam>
 /// <param name="pageIndex">页数</param>
 /// <param name="pageSize">每页条数</param>
 /// <param name="whereLambda">条件</param>
 /// <param name="orderByLambda">排序</param>
 /// <param name="selector">指定字段对象</param>
 /// <param name="isAsc">是否顺序,默认值为true</param>
 /// <returns>指定字段的数据集合</returns>
 public virtual List <TSelector> GetPagedList <TKey, TSelector>(int pageIndex, int pageSize, Expression <Func <T, bool> > whereLambda, Expression <Func <T, TKey> > orderByLambda, Expression <Func <T, TSelector> > selector, bool isAsc = true)
 {
     using (db = new OracleEntities(connString))
     {
         if (isAsc)
         {
             return(db.Set <T>().Where(whereLambda).OrderBy(orderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().Select(selector).ToList());
         }
         else
         {
             return(db.Set <T>().Where(whereLambda).OrderByDescending(orderByLambda).Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().Select(selector).ToList());
         }
     }
 }
Пример #5
0
 /// <summary>
 /// 获取指定字段的最小值
 /// </summary>
 /// <typeparam name="TSelector"></typeparam>
 /// <param name="whereLambda">条件</param>
 /// <param name="selector">需要取的字段</param>
 /// <returns></returns>
 public virtual TSelector Min <TSelector>(Expression <Func <T, bool> > whereLambda, Expression <Func <T, TSelector> > selector)
 {
     using (db = new OracleEntities(connString))
     {
         return(db.Set <T>().Where(whereLambda).Min(selector));
     }
 }
Пример #6
0
 /// <summary>
 /// 获取指定字段的最大值
 /// </summary>
 /// <typeparam name="TSelector"></typeparam>
 /// <param name="selector">需要取的字段</param>
 /// <returns></returns>
 public virtual TSelector Max <TSelector>(Expression <Func <T, TSelector> > selector)
 {
     using (db = new OracleEntities(connString))
     {
         return(db.Set <T>().Max(selector));
     }
 }
Пример #7
0
 /// <summary>
 /// 通过主键查找实体
 /// </summary>
 /// <param name="id">主键</param>
 /// <returns>实体对象</returns>
 public virtual T Get(object id)
 {
     using (db = new OracleEntities(connString))
     {
         return(db.Set <T>().Find(id));
     }
 }
Пример #8
0
 /// <summary>
 /// 获取满足条件的数据条数
 /// </summary>
 /// <param name="whereCount">条件</param>
 /// <returns>数据条数</returns>
 public virtual int Count(Expression <Func <T, bool> > whereCount)
 {
     using (db = new OracleEntities(connString))
     {
         return(db.Set <T>().Count(whereCount));
     }
 }
Пример #9
0
 /// <summary>
 /// 获取总的数据条数
 /// </summary>
 /// <returns>数据条数</returns>
 public virtual int Count()
 {
     using (db = new OracleEntities(connString))
     {
         return(db.Set <T>().Count());
     }
 }
Пример #10
0
        /// <summary>
        /// 批量修改满足满足条件的实体
        /// </summary>
        /// <param name="entity"></param>
        /// <param name="whereLambda"></param>
        /// <param name="propertyNames"></param>
        /// <returns></returns>
        public virtual int Update(T entity, Expression <Func <T, bool> > whereLambda, params string[] propertyNames)
        {
            using (db = new OracleEntities(connString))
            {
                List <T> list = db.Set <T>().Where(whereLambda).ToList();

                Type t = typeof(T);

                List <PropertyInfo> propertyInfos = t.GetProperties(BindingFlags.Instance | BindingFlags.Public).ToList();

                Dictionary <string, PropertyInfo> dicPropertys = new Dictionary <string, PropertyInfo>();

                propertyInfos.ForEach(p =>
                {
                    if (propertyNames.Contains(p.Name))
                    {
                        dicPropertys.Add(p.Name, p);
                    }
                });

                if (propertyNames != null && propertyNames.Length > 0)
                {
                    foreach (var propertyName in propertyNames)
                    {
                        if (dicPropertys.ContainsKey(propertyName))
                        {
                            PropertyInfo propInfo = dicPropertys[propertyName];
                            object       newValue = propInfo.GetValue(entity, null);
                            foreach (T item in list)
                            {
                                propInfo.SetValue(item, newValue, null);
                                db.Entry(item).Property(propInfo.Name).IsModified = true;
                            }
                        }
                    }
                }
                else
                {
                    foreach (var property in propertyInfos)
                    {
                        if (property.Name.ToLower() != "id")
                        {
                            object newValue = property.GetValue(entity, null);
                            foreach (T item in list)
                            {
                                property.SetValue(item, newValue, null);
                                db.Entry(item).Property(property.Name).IsModified = true;
                            }
                        }
                    }
                }

                db.Configuration.ValidateOnSaveEnabled = false;



                return(db.SaveChanges());
            }
        }
Пример #11
0
        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="entity">要添加的实体</param>
        /// <returns>受影响的行数</returns>
        public virtual int Add(T entity)
        {
            using (db = new OracleEntities(connString))
            {
                db.Set <T>().Add(entity);
                db.Configuration.ValidateOnSaveEnabled = false;

                return(db.SaveChanges());
            }
        }
Пример #12
0
        /// <summary>
        /// 添加一条数据
        /// </summary>
        /// <param name="entity">要添加的实体</param>
        /// <returns>当前添加的实体</returns>
        public virtual T AddAndReturnCurrent(T entity)
        {
            using (db = new OracleEntities(connString))
            {
                var current = db.Set <T>().Add(entity);
                db.Configuration.ValidateOnSaveEnabled = false;

                db.SaveChanges();

                return(current);
            }
        }
Пример #13
0
        /// <summary>
        /// 多字段排序的分页查询
        /// </summary>
        /// <typeparam name="TKey">实体对象的属性</typeparam>
        /// <param name="pageIndex">页数</param>
        /// <param name="pageSize">每页条数</param>
        /// <param name="whereLambda">条件</param>
        /// <param name="orderLambdas">排序集合</param>
        /// <param name="isAscs">是否顺序集合</param>
        /// <returns>分页实体集合</returns>
        public virtual List <T> GetPagedList <TKey>(int pageIndex, int pageSize, Expression <Func <T, bool> > whereLambda, IList <Expression <Func <T, TKey> > > orderLambdas, IList <bool> isAscs)
        {
            if (orderLambdas != null)
            {
                if (isAscs == null || orderLambdas.Count != isAscs.Count)
                {
                    throw new Exception("\"排序\"的数量必须和\"是否顺序\"的数量一致");
                }
            }

            var type = typeof(TKey);
            var tkey = type.Assembly.CreateInstance(type.FullName);

            bool isFirstOrder = true;

            using (db = new OracleEntities(connString))
            {
                var queryable = db.Set <T>().Where(whereLambda);

                for (int i = 0; i < orderLambdas.Count; i++)
                {
                    var orderLambda = orderLambdas[i];
                    var isAsc       = isAscs[i];

                    if (isFirstOrder)
                    {
                        if (isAsc)
                        {
                            queryable = queryable.OrderBy(orderLambda);
                        }
                        else
                        {
                            queryable = queryable.OrderByDescending(orderLambda);
                        }

                        isFirstOrder = false;
                    }
                    else
                    {
                        if (isAsc)
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenBy(orderLambda);
                        }
                        else
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenByDescending(orderLambda);
                        }
                    }
                }

                return(queryable.Skip((pageIndex - 1) * pageSize).Take(pageSize).AsNoTracking().ToList());
            }
        }
Пример #14
0
        /// <summary>
        /// 获取满足条件并指定多个排序,指定条数的实体集合
        /// </summary>
        /// <typeparam name="TKey">实体对象的属性</typeparam>
        /// <param name="top">条数</param>
        /// <param name="whereLambda">条件</param>
        /// <param name="orderLambdas">排序集合</param>
        /// <param name="isAscs">是否顺序集合</param>
        /// <returns>实体集合</returns>
        public virtual IList <T> GetList <TKey>(int top, Expression <Func <T, bool> > whereLambda, IList <Expression <Func <T, TKey> > > orderLambdas, IList <bool> isAscs)
        {
            if (orderLambdas != null)
            {
                if (isAscs == null || orderLambdas.Count != isAscs.Count)
                {
                    throw new Exception("\"排序\"的数量必须和\"是否顺序\"的数量一致");
                }
            }

            bool isFirstOrder = true;

            using (db = new OracleEntities(connString))
            {
                var queryable = db.Set <T>().Where(whereLambda);

                for (int i = 0; i < orderLambdas.Count; i++)
                {
                    var orderLambda = orderLambdas[i];
                    var isAsc       = isAscs[i];

                    if (isFirstOrder)
                    {
                        if (isAsc)
                        {
                            queryable = queryable.OrderBy(orderLambda);
                        }
                        else
                        {
                            queryable = queryable.OrderByDescending(orderLambda);
                        }

                        isFirstOrder = false;
                    }
                    else
                    {
                        if (isAsc)
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenBy(orderLambda);
                        }
                        else
                        {
                            queryable = ((IOrderedQueryable <T>)queryable).ThenByDescending(orderLambda);
                        }
                    }
                }

                return(queryable.Take(top).AsNoTracking().ToList());
            }
        }
Пример #15
0
 /// <summary>
 /// 获取满足条件的指定字段的数据集合
 /// </summary>
 /// <typeparam name="TSelector">指定字段对象类型</typeparam>
 /// <param name="whereLambda">条件</param>
 /// <param name="selector">指定字段对象</param>
 /// <returns>指定字段的数据集合</returns>
 public virtual IList <TSelector> GetList <TSelector>(Expression <Func <T, bool> > whereLambda, Expression <Func <T, TSelector> > selector)
 {
     using (db = new OracleEntities(connString))
     {
         try
         {
             return(db.Set <T>().Where(whereLambda).AsNoTracking().Select(selector).ToList());
         }
         catch (Exception e)
         {
             throw e;
         }
     }
 }
Пример #16
0
 /// <summary>
 /// 获取指定字段的数据集合
 /// </summary>
 /// <typeparam name="TSelector">指定字段对象类型</typeparam>
 /// <param name="selector">指定字段对象</param>
 /// <returns>指定字段的数据集合</returns>
 public virtual IList <TSelector> GetList <TSelector>(Expression <Func <T, TSelector> > selector)
 {
     try
     {
         using (db = new OracleEntities(connString))
         {
             return(db.Set <T>().AsNoTracking().Select(selector).ToList());
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #17
0
 /// <summary>
 /// 获取实体集合
 /// </summary>
 /// <returns>实体集合</returns>
 public virtual IList <T> GetList()
 {
     try
     {
         using (db = new OracleEntities(connString))
         {
             return(db.Set <T>().AsNoTracking().ToList());
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
Пример #18
0
 /// <summary>
 /// 查找满足条件的第一个实体,未找到则返回null
 /// </summary>
 /// <param name="whereLambda">条件</param>
 /// <returns>实体对象</returns>
 public virtual T Get(Expression <Func <T, bool> > whereLambda)
 {
     using (db = new OracleEntities(connString))
     {
         try
         {
             return(db.Set <T>().Where(whereLambda).AsNoTracking().FirstOrDefault());
         }
         catch (Exception e)
         {
             throw e;
         }
     }
 }
Пример #19
0
        /// <summary>
        /// 删除满足条件的所有实体
        /// </summary>
        /// <param name="whereLambda">条件</param>
        /// <returns>受影响的行数</returns>
        public virtual int Delete(Expression <Func <T, bool> > whereLambda)
        {
            using (db = new OracleEntities(connString))
            {
                List <T> list = db.Set <T>().Where(whereLambda).ToList();

                list.ForEach(t =>
                {
                    db.Entry(t).State = System.Data.Entity.EntityState.Deleted;
                });

                return(db.SaveChanges());
            }
        }
Пример #20
0
        /// <summary>
        /// 添加一个集合的数据
        /// </summary>
        /// <param name="list">要添加的实体集合</param>
        /// <returns>受影响的行数</returns>
        public virtual int Add(IList <T> list)
        {
            using (db = new OracleEntities(connString))
            {
                db.Set <T>().AddRange(list);
                db.Configuration.ValidateOnSaveEnabled = false;

                try
                {
                    return(db.SaveChanges());
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }
Пример #21
0
        /// <summary>
        /// 通过主键删除一条数据
        /// </summary>
        /// <param name="id">主键</param>
        /// <returns>受影响的行数</returns>
        public virtual int Delete(object id)
        {
            using (db = new OracleEntities(connString))
            {
                try
                {
                    var entity = db.Set <T>().Find(id);
                    if (entity != null)
                    {
                        db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;

                        return(db.SaveChanges());
                    }
                    else
                    {
                        return(0);
                    }
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
        }