/// <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) { 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; //连接符号 if (string.IsNullOrEmpty(exp.Join)) { //判断个数是为了防止参数名相同 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 "; } } #region 条件语句 switch (exp.Condition.Trim()) { case "like": listPara.Add(new SqlParameter("@" + paraName, "%" + exp.Value + "%")); where += " " + fieldName + " like @" + paraName; break; case "in": where += " " + fieldName + " in (" + exp.Value + ")"; break; default: listPara.Add(new SqlParameter("@" + paraName, exp.Value)); where += " " + fieldName + " " + exp.Condition + " @" + 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); }