public static WhereExpression GetPrimaryKeyWhere(Entity entity) { var pkFilds = entity.GetPrimaryKeyFields(); var exp = new WhereExpression(); foreach (var field in pkFilds) { var newExp = field == entity.GetValue(field.PropertyName); if (WhereExpression.IsNullOrEmpty(exp)) { exp = newExp; } else { exp = WhereExpression.Create(exp, newExp, QueryOperator.And); } } return(exp); }
/// <summary> /// 创建删除DbCommand /// </summary> /// <param name="tableName"></param> /// <param name="where"></param> /// <returns></returns> public DbCommand CreateDeleteCommand(string tableName, WhereExpression where) { if (WhereExpression.IsNullOrEmpty(where)) { where = WhereExpression.ALL; } var translater = CreateTranslater(); StringBuilder sql = new StringBuilder(); sql.Append(ExpressionTranslater.SQL_DELETEFROM); sql.Append(db.DbProvider.BuildTableName(tableName)); sql.Append(ExpressionTranslater.SQL_WHERE); sql.Append(translater.TranslateWhere(where)); DbCommand cmd = db.GetSqlStringCommand(sql.ToString()); db.AddCommandParameter(cmd, translater.Params.ToArray()); return(cmd); }
public static WhereExpression GetPrimaryKeyWhere <T>(object[] pkValues) where T : Entity { var entity = EntityHelper.GetTable <T>(); var pkFilds = entity.GetPrimaryKeyFields(); var exp = new WhereExpression(); for (var i = 0; i < pkFilds.Length; i++) { var field = pkFilds[i]; var value = pkValues[i]; if (WhereExpression.IsNullOrEmpty(exp)) { exp = field == value; } else { exp = WhereExpression.Create(exp, field == value, QueryOperator.Or); } } return(exp); }
/// <summary> /// 创建更新DbCommand /// </summary> /// <typeparam name="T"></typeparam> /// <param name="fields"></param> /// <param name="values"></param> /// <param name="where"></param> /// <returns></returns> public DbCommand CreateUpdateCommand <T>(Field[] fields, object[] values, WhereExpression where) where T : Entity { Guard.Check(!EntityHelper.IsReadOnly <T>(), TextResource.CanNotReadOnly.FormatWith(EntityHelper.GetName <T>())); if (null == fields || fields.Length == 0 || null == values || values.Length == 0) { return(null); } Guard.Check(fields.Length == values.Length, TextResource.ArgumentShouldEqual.FormatWith("字段的个数", "值的个数")); int length = fields.Length; Field identityField = EntityHelper.GetIdentityField <T>(); bool identityExist = !Field.IsNullOrEmpty(identityField); if (WhereExpression.IsNullOrEmpty(where)) { where = WhereExpression.ALL; } StringBuilder sql = new StringBuilder(); sql.Append(ExpressionTranslater.SQL_UPDDATE); sql.Append(db.DbProvider.BuildTableName(EntityHelper.GetName <T>())); sql.Append(ExpressionTranslater.SQL_UPDATE_SET); List <QueryParameter> list = new List <QueryParameter>(); StringBuilder colums = new StringBuilder(); var appended = false; for (int i = 0; i < length; i++) { if (identityExist && fields[i].PropertyName.Equals(identityField.PropertyName)) { continue; } if (appended) { colums.Append(","); } appended = true; colums.Append(fields[i].FieldName); colums.Append("="); if (values[i] is Field) { Field fieldValue = (Field)values[i]; colums.Append(fieldValue.FieldNameWithTable); } else { string pname = CreateParmName(); colums.Append(pname); var p = new QueryParameter(pname, values[i]); list.Add(p); } } sql.Append(colums); var translater = CreateTranslater(); sql.Append(ExpressionTranslater.SQL_WHERE); translater.SetParmStartIndex(paramCounter); sql.Append(translater.TranslateWhere(where)); list.AddRange(translater.Params); DbCommand cmd = db.GetSqlStringCommand(sql.ToString()); db.AddCommandParameter(cmd, list.ToArray()); return(cmd); }