예제 #1
0
        public ReservedQueryRule <T> Reserve <T>(IQueryRule queryRule) where T : class
        {
            if (queryRule == null)
            {
                throw new ArgumentNullException(nameof(queryRule));
            }
            var type    = typeof(T);
            var methods = new List <QueryRuleMethodDescriptor>();
            var ignores = new List <string>();

            ignores.AddRange(QueryRulesIgnored);

            foreach (var method in Methods)
            {
                if (!method.CanApply(type))
                {
                    continue;
                }

                methods.Add(method);
                ignores.AddRange(method.QueryRulesIgnored);
            }

            ignores = ignores.Distinct().ToList();

            return(new ReservedQueryRule <T>
            {
                Instance = queryRule,
                Name = QueryRuleName,
                Methods = methods,
                QueryRulesIgnored = ignores
            });
        }
예제 #2
0
        public IQueryable <T> Apply <T>(IQueryRule queryRule, IQueryable <T> queryable)
        {
            if (queryRule == null)
            {
                throw new ArgumentNullException(nameof(queryRule));
            }
            if (queryable == null)
            {
                throw new ArgumentNullException(nameof(queryable));
            }
            var result = queryable;
            var type   = typeof(T);

            foreach (var method in Methods)
            {
                if (!method.CanApply(type))
                {
                    continue;
                }

                result = method.Apply(queryRule, result);
            }

            return(result);
        }
예제 #3
0
        internal IQueryable <T> Apply <T>(IQueryRule queryRule, IQueryable <T> queryable)
        {
            if (queryable == null)
            {
                return(null);
            }
            var genericType = typeof(T);

            return((IQueryable <T>)(IsGenericMethod
                                ? MethodInfo.MakeGenericMethod(genericType).Invoke(queryRule, new object[] { queryable })
                                : MethodInfo.Invoke(queryRule, new object[] { queryable })));
        }
 public DbPermissionCommandGenerator(IDbProviderFactory dbFactory, IDbDalcView[] views) : base(dbFactory, views)
 {
     Rules = new IQueryRule[0];
 }