/// <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)); }
/// <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)); }
/// <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)); }
/// <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); }