示例#1
0
        /// <summary>
        /// 不分页查询,通过表达式查询数据
        /// </summary>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public List <TEntity> Find(System.Linq.Expressions.Expression <Func <TEntity, bool> > express)
        {
            //获取参数和条件
            CoreFrameworkEntity lambdaEntity = GetLambdaEntity(express);

            return(this.CommonSearch(lambdaEntity));
        }
        /// <summary>
        /// 删除
        /// </summary>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public int Delete(List <Expression> express)
        {
            //获取参数和条件
            CoreFrameworkEntity coreFrameworkEntity = GetParaListAndWhere(express);

            return(DeleteExecute(coreFrameworkEntity));
        }
        /// <summary>
        /// 获取实体
        /// </summary>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public TEntity Get(List <Expression> express)
        {
            //获取参数和条件
            CoreFrameworkEntity coreFrameworkEntity = GetParaListAndWhere(express);

            return(GetExecute(coreFrameworkEntity));
        }
        /// <summary>
        /// 获取Lambda表达式返回的结果
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="func"></param>
        /// <returns></returns>
        public CoreFrameworkEntity GetLambdaEntity <T>(System.Linq.Expressions.Expression <Func <T, bool> > func)
        {
            if (func == null)
            {
                return(null);
            }

            listPara.Clear();
            CoreFrameworkEntity lambdaEntity = new CoreFrameworkEntity();

            // 二元运算符表达式
            if (func.Body is System.Linq.Expressions.BinaryExpression)
            {
                System.Linq.Expressions.BinaryExpression be = ((System.Linq.Expressions.BinaryExpression)func.Body);
                lambdaEntity.Where    = BinarExpressionProvider(be.Left, be.Right, be.NodeType);
                lambdaEntity.ParaList = listPara;
            }
            // 单纯的静态方法
            if (func.Body is System.Linq.Expressions.MethodCallExpression)
            {
                System.Linq.Expressions.MethodCallExpression be = ((System.Linq.Expressions.MethodCallExpression)func.Body);
                lambdaEntity.Where    = ExpressionRouter(be);
                lambdaEntity.ParaList = listPara;
            }
            return(lambdaEntity);
        }
        /// <summary>
        /// 删除执行
        /// </summary>
        /// <param name="coreFrameworkEntity"></param>
        /// <returns></returns>
        private int DeleteExecute(CoreFrameworkEntity coreFrameworkEntity)
        {
            //参数列表
            List <SqlParameter> listPara = new List <SqlParameter>();

            listPara.AddRange(coreFrameworkEntity.ParaList);

            //实体事件--变更前
            TEntity entity = Get(PrimaryKey);

            EventHelper.Instance.Execute(ChangingEventKey, entity);

            //拼接SQL语句
            string cmdText = "delete from " + TableName + " where " + coreFrameworkEntity.Where;
            int    result  = SqlConvertHelper.GetInstallSqlHelper(OrgCode).ExecuteNonQuery(cmdText, listPara);

            //设置缓存
            object id = GetPrimaryKeyValue(entity);

            Cache.BusinessCachesHelper <TEntity> .RemoveEntityCache(id);

            //实体事件--变更后
            EventHelper.Instance.Execute(ChangedEventKey, entity);

            return(result);
        }
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity">实体</param>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        private int UpdateExecte(TEntity entity, CoreFrameworkEntity coreFrameworkEntity)
        {
            DBModel dbModel = GetUpdateInfo(entity);

            if (dbModel == null)
            {
                return(0);
            }

            dbModel.Params.AddRange(coreFrameworkEntity.ParaList);
            dbModel.SQL += " where " + coreFrameworkEntity.Where;

            //实体事件--变更前
            EventHelper.Instance.Execute(ChangingEventKey, entity);

            //执行
            int result = SqlConvertHelper.GetInstallSqlHelper(OrgCode).ExecuteNonQuery(dbModel.SQL, dbModel.Params);

            //设置缓存
            object id = GetPrimaryKeyValue(entity);

            Cache.BusinessCachesHelper <TEntity> .AddEntityCache(id, entity);

            //实体事件--变更后
            EventHelper.Instance.Execute(ChangedEventKey, entity);

            return(result);
        }
        /// <summary>
        /// 公共搜索
        /// </summary>
        /// <param name="coreFrameworkEntity"></param>
        /// <param name="count"></param>
        /// <param name="selectFields"></param>
        /// <param name="orderBy"></param>
        /// <returns></returns>
        private List <TEntity> CommonSearch(CoreFrameworkEntity coreFrameworkEntity, int?count = null, string selectFields = null, string orderBy = null)
        {
            coreFrameworkEntity.Where = string.IsNullOrEmpty(coreFrameworkEntity.Where) ? "1=1" : coreFrameworkEntity.Where; //条件
            selectFields = string.IsNullOrEmpty(selectFields) ? "*" : selectFields;                                          //查询字段
            orderBy      = string.IsNullOrEmpty(orderBy) ? "" : "order by " + orderBy;                                       //排序
            string topStr = count.HasValue == false ? "" : (" top " + count);                                                //Top

            StringBuilder cmdText = new StringBuilder();

            cmdText.Append("select");
            cmdText.Append(" ");
            cmdText.Append(topStr);
            cmdText.Append(" ");
            cmdText.Append(selectFields);
            cmdText.Append(" ");
            cmdText.Append("from");
            cmdText.Append(" ");
            cmdText.Append(TableName);
            cmdText.Append(" ");
            cmdText.Append("where");
            cmdText.Append(" ");
            cmdText.Append(coreFrameworkEntity.Where);
            cmdText.Append(" ");
            cmdText.Append(orderBy);

            IDataReader sdr = SqlConvertHelper.GetInstallSqlHelper(OrgCode).ExecuteReader(cmdText.ToString(), coreFrameworkEntity.ParaList);

            return(DynamicBuilder <TEntity> .GetList(sdr, columnAttrList));
        }
示例#8
0
        /// <summary>
        /// 不分页查询,基础方法
        /// </summary>
        /// <param name="express">表达式</param>
        /// <param name="count">显示总数,空则全部显示</param>
        /// <param name="selectFields">查询字段</param>
        /// <param name="orderBy">排序,为空则不排序</param>
        /// <returns></returns>
        public List <TEntity> ExpressionSearch(List <Expression> express, int?count = null, string selectFields = null, string orderBy = null)
        {
            //获取参数和条件
            CoreFrameworkEntity CoreFrameworkEntity = GetParaListAndWhere(express);

            //条件
            return(this.CommonSearch(CoreFrameworkEntity, count, selectFields, orderBy));
        }
示例#9
0
        /// <summary>
        /// 不分页查询,基础方法
        /// </summary>
        /// <param name="express">表达式</param>
        /// <param name="count">显示总数,空则全部显示</param>
        /// <param name="selectFields">查询字段</param>
        /// <param name="orderBy">排序,为空则不排序</param>
        /// <returns></returns>
        public List <TEntity> Search(System.Linq.Expressions.Expression <Func <TEntity, bool> > express, int?count = null, string selectFields = null, string orderBy = null)
        {
            //获取参数和条件
            CoreFrameworkEntity lambdaEntity = GetLambdaEntity(express);

            //调用通用查询
            return(this.CommonSearch(lambdaEntity, count, selectFields, orderBy));
        }
        /// <summary>
        /// Get执行
        /// </summary>
        /// <param name="coreFrameworkEntity"></param>
        /// <returns></returns>
        private TEntity GetExecute(CoreFrameworkEntity coreFrameworkEntity)
        {
            //拼接SQL语句
            string         cmdText = "select * from " + TableName + " where " + coreFrameworkEntity.Where;
            IDataReader    sdr     = SqlConvertHelper.GetInstallSqlHelper(OrgCode).ExecuteReader(cmdText, coreFrameworkEntity.ParaList);
            List <TEntity> list    = DynamicBuilder <TEntity> .GetList(sdr, columnAttrList);

            return(list.Count > 0 ? list.First() : default(TEntity));
        }
示例#11
0
        /// <summary>
        /// 分页查询,基础方法,参数:页面大小,页码,主键,查询字段,表达式,排序,数据总条数
        /// </summary>
        /// <param name="pageSize">页面大小</param>
        /// <param name="pageIndex">页码</param>
        /// <param name="selectFields">查询字段</param>
        /// <param name="express">表达式</param>
        /// <param name="orderBy">排序</param>
        /// <param name="recordCount">数据总条数</param>
        /// <returns></returns>
        public List <TEntity> ExpressionSearch(int pageSize, int pageIndex, string selectFields, List <Expression> express, string orderBy, ref int recordCount)
        {
            //获取参数和条件
            CoreFrameworkEntity CoreFrameworkEntity = GetParaListAndWhere(express);

            //条件
            string where = CoreFrameworkEntity.Where;
            //参数列表
            List <SqlParameter> listPara = CoreFrameworkEntity.ParaList;

            selectFields = string.IsNullOrEmpty(selectFields) ? "*" : selectFields;//查询字段
            orderBy      = string.IsNullOrEmpty(orderBy) ? PrimaryKey : orderBy;

            IPager      page = Pager.Pager.getInstance();
            IDataReader sdr  = page.GetPagerInfo(TableName, selectFields, pageSize, pageIndex, where, orderBy, ref recordCount, listPara);

            return(DynamicBuilder <TEntity> .GetList(sdr, columnAttrList));
        }
        /// <summary>
        /// 获取实体
        /// </summary>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public TEntity Get(System.Linq.Expressions.Expression <Func <TEntity, bool> > express)
        {
            CoreFrameworkEntity lamdaEntity = GetLambdaEntity <TEntity>(express);

            return(GetExecute(lamdaEntity));
        }
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity">实体</param>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public int Update(TEntity entity, System.Linq.Expressions.Expression <Func <TEntity, bool> > express)
        {
            CoreFrameworkEntity lamdaEntity = GetLambdaEntity(express);

            return(UpdateExecte(entity, lamdaEntity));
        }
        /// <summary>
        /// 修改
        /// </summary>
        /// <param name="entity">实体</param>
        /// <param name="express">表达式</param>
        /// <returns></returns>
        public int Update(TEntity entity, List <Expression> express)
        {
            CoreFrameworkEntity careEntity = GetParaListAndWhere(express);

            return(UpdateExecte(entity, careEntity));
        }
        /// <summary>
        /// 获取表达式列表对应的参数列表和条件
        /// </summary>
        /// <param name="express"></param>
        /// <returns></returns>
        public CoreFrameworkEntity GetParaListAndWhere(List <Expression> express)
        {
            //获取实体列的特性
            List <EntityPropColumnAttributes> columnAttrList = AttributeHelper.GetEntityColumnAtrributes <TEntity>();

            #region 获取参数和条件
            //参数列表
            List <SqlParameter> listPara = new List <SqlParameter>();
            //条件
            string where = "";
            if (express != null)
            {
                if (express.Count == 0)
                {
                    where = "1=1";
                }
                int i = 0;//运行的位置,从下标0开始
                foreach (Expression exp in express)
                {
                    //连接符号
                    if (string.IsNullOrEmpty(exp.Join))
                    {
                        if (string.IsNullOrEmpty(exp.FieldName) || exp.Value == null)
                        {
                            continue;
                        }
                        string fieldName = columnAttrList.Where(w => w.propName.ToLower() == exp.FieldName.ToLower()).Count() > 0
                        ? columnAttrList.Where(w => w.propName.ToLower() == exp.FieldName.ToLower()).First().fieldName : exp.FieldName;

                        //判断个数是为了防止参数名相同
                        int    fieldCount = express.Where(e => e.FieldName == exp.FieldName).Count();
                        string paraName   = fieldCount == 1 ? exp.FieldName : exp.FieldName + "_p" + i.ToStr();

                        //当两个条件没有使用连接符时,则默认用and拼接,从第一个参数后试用
                        if (i > 0)
                        {
                            //如果上一个参数不是连接符时,默认每个参数是以and的形式拼接
                            if (string.IsNullOrEmpty(express[i - 1].Join))
                            {
                                where += " and ";
                            }
                        }

                        //加空格
                        where += " ";

                        #region 条件语句
                        switch (exp.Condition)
                        {
                        case ConditionEnum.Like:
                            listPara.Add(new SqlParameter("@" + paraName, "%" + exp.Value + "%"));
                            where += fieldName + " like @" + paraName;
                            break;

                        case ConditionEnum.LeftLike:
                            listPara.Add(new SqlParameter("@" + paraName, "%" + exp.Value));
                            where += fieldName + " like @" + paraName;
                            break;

                        case ConditionEnum.RightLike:
                            listPara.Add(new SqlParameter("@" + paraName, exp.Value + "%"));
                            where += fieldName + " like @" + paraName;
                            break;

                        case ConditionEnum.NotLike:
                            listPara.Add(new SqlParameter("@" + paraName, "%" + exp.Value + "%"));
                            where += fieldName + " not like @" + paraName;
                            break;

                        case ConditionEnum.In:
                            List <SqlParameter> paramConvertIn = GetParamList((List <object>)exp.Value, exp.FieldName);
                            listPara.AddRange(paramConvertIn);
                            where += fieldName + " in (" + string.Join(",", paramConvertIn.Select(s => s.ParameterName).ToArray()) + ")";
                            break;

                        case ConditionEnum.NotIn:
                            List <SqlParameter> paramConvertNotIn = GetParamList((List <object>)exp.Value, exp.FieldName);
                            listPara.AddRange(paramConvertNotIn);
                            where += fieldName + " not in (" + string.Join(",", paramConvertNotIn.Select(s => s.ParameterName).ToArray()) + ")";
                            break;

                        default:
                            string sign = "=";
                            switch (exp.Condition)
                            {
                            case ConditionEnum.Eq:
                                sign = "=";
                                break;

                            case ConditionEnum.Ne:
                                sign = "<>";
                                break;

                            case ConditionEnum.Gt:
                                sign = ">";
                                break;

                            case ConditionEnum.Ge:
                                sign = ">=";
                                break;

                            case ConditionEnum.Lt:
                                sign = "<";
                                break;

                            case ConditionEnum.Le:
                                sign = "<=";
                                break;
                            }
                            listPara.Add(new SqlParameter("@" + paraName, exp.Value));
                            where += fieldName + " " + sign + " @" + paraName;
                            break;
                        }
                        #endregion
                    }
                    else
                    {
                        where += " " + exp.Join + " ";
                    }
                    i++;
                }
            }
            else
            {
                where = "1=1";
            }
            #endregion

            CoreFrameworkEntity entity = new CoreFrameworkEntity();
            entity.ParaList = listPara;
            entity.Where    = where;
            return(entity);
        }