示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
        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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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);
        }
示例#6
0
        /// <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);
        }
示例#7
0
        /// <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);
        }
示例#8
0
 public When_visiting()
 {
     visit = factory.CreateVisitExpression(parser);
 }