/// <summary> /// 根据实例主键进行更新 /// </summary> /// <param name="action">更新动作</param> /// <param name="conditions">更新的条件</param> public static bool UpdateWhere <T>(Expression <Action <T> > action, Expression <Func <T, bool> > conditions) where T : OrmBaseModel { SqlVisitor visitor = new SqlVisitor(); visitor.Visit(action); var setStr = visitor.GetSql(); var setPrarmes = visitor.GetParameters(); visitor.Visit(conditions); var whereStr = visitor.GetSql(); var wherePrarmes = visitor.GetParameters(); var sqlStr = SqlCache <T> .GetSql(SqlType.UpdateWhere) + setStr + " WHERE " + whereStr; var allParames = new List <MySqlParameter>(); allParames.AddRange(setPrarmes); allParames.AddRange(wherePrarmes); return(ExceteSql <bool>(sqlStr, allParames.ToArray(), command => { var result = command.ExecuteNonQuery(); return result >= 1; })); }
/// <summary> /// 批量获取符合条件的数据 /// </summary> /// <param name="conditions">查找的条件</param> public static IList <T> FindWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel { SqlVisitor visitor = new SqlVisitor(); visitor.Visit(conditions); var sqlStr = SqlCache <T> .GetSql(SqlType.FindWhere) + visitor.GetSql(); var parameters = visitor.GetParameters(); return(ExceteSql <IList <T> >(sqlStr, parameters, command => { var result = new List <T>(); var type = typeof(T); var properies = SqlCache <T> .AllProperties; var adapter = new MySqlDataAdapter(command); var dataSet = new DataSet(); var count = adapter.Fill(dataSet); for (var i = 0; i < dataSet.Tables[0].Rows.Count; i++) { T t = Activator.CreateInstance <T>(); foreach (var proerty in properies) { var value = dataSet.Tables[0].Rows[i][proerty.GetMappingName()]; proerty.SetValue(t, value is DBNull ? null : value); } result.Add(t); } return result; })); }
internal static string GenerateSql(VfpProviderManifest vfpManifest, DbCommandTree commandTree, out List <DbParameter> parameters, out CommandType commandType) { commandType = CommandType.Text; parameters = null; //Handle Query var queryCommandTree = commandTree as DbQueryCommandTree; if (queryCommandTree != null) { var sqlSelectVisitor = new SqlVisitor(); var sqlFragment = sqlSelectVisitor.Visit(vfpManifest, queryCommandTree, out parameters); return(WriteSql(sqlFragment, sqlSelectVisitor)); } //Handle Function var functionCommandTree = commandTree as DbFunctionCommandTree; if (functionCommandTree != null) { return(DmlSqlFormatter.GenerateFunctionSql(functionCommandTree, out commandType)); } //Handle Insert var insertCommandTree = commandTree as DbInsertCommandTree; if (insertCommandTree != null) { return(DmlSqlFormatter.GenerateInsertSql(vfpManifest, insertCommandTree, out parameters)); } //Handle Delete var deleteCommandTree = commandTree as DbDeleteCommandTree; if (deleteCommandTree != null) { return(DmlSqlFormatter.GenerateDeleteSql(vfpManifest, deleteCommandTree, out parameters)); } //Handle Update var updateCommandTree = commandTree as DbUpdateCommandTree; if (updateCommandTree != null) { return(DmlSqlFormatter.GenerateUpdateSql(vfpManifest, updateCommandTree, out parameters)); } return(null); }
/// <summary> /// 根据表达式目录树,批量的删除 /// </summary> /// <param name="conditions">删除的条件</param> public static bool DeleateWhere <T>(Expression <Func <T, bool> > conditions) where T : OrmBaseModel { if (null == conditions) { return(false); } SqlVisitor visitor = new SqlVisitor(); visitor.Visit(conditions); var sqlStr = SqlCache <T> .GetSql(SqlType.DeleateWhere) + visitor.GetSql(); var parameters = visitor.GetParameters(); return(ExceteSql <bool>(sqlStr, parameters, command => { var result = command.ExecuteNonQuery(); return result >= 1; })); }