/// <summary> /// 表查询 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="predicate">条件</param> /// <param name="field">字段</param> /// <param name="Key"></param> /// <returns></returns> public IQuery Query <T>(Expression <Func <T, bool> > predicate, Expression <Func <T, object> > field = null, string key = null, string dbFile = "db.json") { var projectName = Assembly.GetCallingAssembly().GetName().Name; if (DataConfig.DataType(key, projectName, dbFile) && key == null) { throw new Exception("数据库查询key不能为空,数据库类型有多个"); } if (this.query.Data.Config != null && this.query.Data.Config.IsChangeDb) { key = this.query.Data.Key; this.query.Data = new DataQuery(); this.query.Data.Config = DataConfig.Get(key); this.query.Data.Key = key; } else { this.query.Data = new DataQuery(); this.query.Data.Config = DataConfig.Get(key); this.query.Data.Key = key; } var queryField = BaseField.QueryField <T>(predicate, field, this.query.Data.Config); query.Data.Field.Add(queryField.Field); query.Data.AsName.AddRange(queryField.AsName); var condtion = VisitExpression.LambdaWhere <T>(predicate, this.query.Data.Config); this.query.Data.Predicate.Add(condtion); this.query.Data.Table.Add(string.Format("{0} {1}", typeof(T).Name, predicate.Parameters[0].Name)); return(this.query); }
/// <summary> /// 表查询 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="predicate">条件</param> /// <param name="field">字段</param> /// <param name="Key"></param> /// <returns></returns> public static DataQuery Query <T>(Expression <Func <T, bool> > predicate, Expression <Func <T, object> > field = null, string key = null, string dbFile = "db.json") { var result = new DataQuery(); var projectName = Assembly.GetCallingAssembly().GetName().Name; var cacheKey = $"FastData.Key.{typeof(Microsoft.Extensions.DependencyInjection.ConfigKey).Name}"; if (DbCache.Exists(CacheType.Web, cacheKey) && key == null) { key = DbCache.Get <Microsoft.Extensions.DependencyInjection.ConfigKey>(CacheType.Web, cacheKey).dbKey; } else if (DataConfig.DataType(key, projectName, dbFile) && key == null) { throw new Exception("数据库查询key不能为空,数据库类型有多个"); } result.Config = DataConfig.Get(key, projectName, dbFile); result.Key = key; var queryField = BaseField.QueryField <T>(predicate, field, result.Config); result.Field.Add(queryField.Field); result.AsName.AddRange(queryField.AsName); var condtion = VisitExpression.LambdaWhere <T>(predicate, result.Config); result.Predicate.Add(condtion); result.Table.Add(string.Format("{0} {1}", typeof(T).Name, predicate.Parameters[0].Name)); result.TableName.Add(typeof(T).Name); return(result); }
public static IServiceCollection AddFastDataFilter <T>(this IServiceCollection serviceCollection, Expression <Func <T, bool> > predicate, FilterType type) { if (config != null) { ConfigModel item; string projectName = null; if (config.IsResource) { projectName = Assembly.GetCallingAssembly().GetName().Name; } item = DataConfig.Get(config.dbKey, projectName, config.dbFile); var model = VisitExpression.LambdaWhere <T>(predicate, item); if (predicate.Parameters.Count > 0) { var flag = string.Format("{0}.", (predicate.Parameters[0] as ParameterExpression).Name); model.Where = model.Where.Replace(flag, ""); } var key = $"Filter.{typeof(T).Name}.{type.ToString()}"; DbCache.Set <VisitModel>(CacheType.Web, key, model); } return(serviceCollection); }
/// <summary> /// 查询join /// </summary> /// <typeparam name="T">泛型</typeparam> /// <typeparam name="T1">泛型</typeparam> /// <param name="joinType">left join,right join,inner join</param> /// <param name="item"></param> /// <param name="predicate">条件</param> /// <param name="field">字段</param> /// <returns></returns> private IQuery JoinType <T, T1>(string joinType, Expression <Func <T, T1, bool> > predicate, Expression <Func <T1, object> > field = null, bool isDblink = false) { var queryField = BaseField.QueryField <T, T1>(predicate, field, this.Data.Config); this.Data.Field.Add(queryField.Field); this.Data.AsName.AddRange(queryField.AsName); var condtion = VisitExpression.LambdaWhere <T, T1>(predicate, this.Data.Config); this.Data.Predicate.Add(condtion); this.Data.Table.Add(string.Format("{2} {0}{3} {1}", typeof(T1).Name, predicate.Parameters[1].Name , joinType, isDblink && !string.IsNullOrEmpty(this.Data.Config.DbLinkName) ? string.Format("@", this.Data.Config.DbLinkName) : "")); return(this); }
/// <summary> /// or /// </summary> /// <typeparam name="T"></typeparam> /// <param name="predicate"></param> /// <returns></returns> public override IQuery Or <T>(Expression <Func <T, bool> > predicate) { var visitModel = VisitExpression.LambdaWhere <T>(predicate, this.Data.Config); if (this.Data.Predicate.Count >= 1) { this.Data.Predicate[0].Where += $" or {visitModel.Where}"; } if (this.Data.Predicate.Count == 0) { this.Data.Table.Add(string.Format("{0} {1}", typeof(T).Name, predicate.Parameters[0].Name)); this.Data.TableName.Add(typeof(T).Name); this.Data.Predicate.Add(visitModel); } return(this); }
/// <summary> /// and /// </summary> /// <param name="predicate"></param> /// <returns></returns> public FastQueryable <T> And(Expression <Func <T, bool> > predicate) { var visitModel = VisitExpression.LambdaWhere <T>(predicate, this.Query); if (this.Query.Predicate.Count >= 1) { this.Query.Predicate[0].Where += $" and {visitModel.Where}"; } if (this.Query.Predicate.Count == 0) { this.Query.Table.Add(string.Format("{0} {1}", typeof(T).Name, predicate.Parameters[0].Name)); this.Query.TableName.Add(typeof(T).Name); this.Query.TableAsName.Add(typeof(T).Name, predicate.Parameters[0].Name); this.Query.Predicate.Add(visitModel); } return(this); }
/// <summary> /// 表查询 /// </summary> /// <typeparam name="T">泛型</typeparam> /// <param name="predicate">条件</param> /// <param name="field">字段</param> /// <param name="Key"></param> /// <returns></returns> public static DataQuery Query <T>(Expression <Func <T, bool> > predicate, Expression <Func <T, object> > field = null, string key = null, string dbFile = "db.json") { var projectName = Assembly.GetCallingAssembly().GetName().Name; var result = new DataQuery(); result.Config = DataConfig.Get(key, projectName, dbFile); result.Key = key; var queryField = BaseField.QueryField <T>(predicate, field, result.Config); result.Field.Add(queryField.Field); result.AsName.AddRange(queryField.AsName); var condtion = VisitExpression.LambdaWhere <T>(predicate, result.Config); result.Predicate.Add(condtion); result.Table.Add(string.Format("{0} {1}", typeof(T).Name, predicate.Parameters[0].Name)); return(result); }