internal static string CreateQuerySQLWithActive <T>(Expression <Func <T, bool> > expression, Expression <Func <T, object> > fieldExp = null, DapperSort sort = null) where T : class { string fieldNames = "*"; if (fieldExp != null) { FieldsFormater format = new FieldsFormater(); format.Visit(fieldExp); if (format.Parameters.Count > 0) { fieldNames = string.Join(",", format.Parameters.Select(x => x.Key)); } } var translate = new SqlTranslateFormater(); string sqlWhere = translate.Translate(expression); if (sort != null && sort.Count > 0) { sqlWhere += $" Order By {sort}"; } string tableName = GetTableName(typeof(T)); StringBuilder sqlBuilder = new StringBuilder($"select {fieldNames} from {tableName} where IsActive=1 AND "); sqlBuilder.Append(sqlWhere); return(sqlBuilder.ToString()); }
/// <summary> /// 立即执行更新语句,API采用 Update({new entity expression}).Where(expression).Go()的链式使用方式 /// </summary> /// <typeparam name="TModel">模型名称</typeparam> /// <param name="connection"></param> /// <param name="objExp">更新对象表达式,表示要更新的列信息</param> /// <returns>将返回一个操作接口,此接口会有一个Where方法和Go方法,Where表示要添加条件,Go则表示立即执行语句。</returns> /// <example> session.Update(u => new AdminUser1 {ID = "5", NameA = "maxzhang"}).Where(p => p.Age > 5).Go</example> public static IOperatorWhere <TModel> Update <TModel>(this IDbConnection connection, Expression <Func <TModel, TModel> > objExp) where TModel : class { string tableName = GetTableName(typeof(TModel)); FieldsFormater format = new FieldsFormater(); format.Visit(objExp); string paramterNameAndValues = string.Join(",", format.Parameters.Select(kv => kv.Key + "=" + kv.Value.Name)); string template = string.Format("Update {0} SET {1} Where ", tableName, paramterNameAndValues); var ps = format.Parameters.Values.Where(p => p.IsMethodType == false).ToList(); return(new OperatorWhereObject <TModel>(connection, template, ps)); }