예제 #1
0
        private IQueryHandler <T> listHandlerFor <T>(QueryModel model, IIncludeJoin[] joins, QueryStatistics stats)
        {
            if (model.HasOperator <ToJsonArrayResultOperator>())
            {
                var query = new LinqQuery <T>(_store, model, joins, stats);
                return(new JsonQueryHandler(query.As <LinqQuery <string> >()).As <IQueryHandler <T> >());
            }

            if (!typeof(T).IsGenericEnumerable())
            {
                return(null);
            }

            var elementType = typeof(T).GetGenericArguments().First();
            var handlerType = typeof(LinqQuery <>);

            if (typeof(T).GetGenericTypeDefinition() == typeof(IEnumerable <>))
            {
                handlerType = typeof(EnumerableQueryHandler <>);
            }

            // TODO -- WTH?
            return
                (Activator.CreateInstance(handlerType.MakeGenericType(elementType), _store, model, joins, stats)
                 .As <IQueryHandler <T> >());
        }
예제 #2
0
        void SelectQuery(object sender, LinkLabelLinkClickedEventArgs e)
        {
            LinqQuery query = (sender as LinkLabel).Tag as LinqQuery;

            tabControl.SelectedTab = tabPageQuery;
            richTextBoxScript.Text = query.Query;
        }
예제 #3
0
        IEnumerable <T> IQueryExecutor.ExecuteCollection <T>(QueryModel queryModel)
        {
            Tenant.EnsureStorageExists(queryModel.SourceType());

            var handler = new LinqQuery <T>(Store, queryModel, _includes.ToArray(), Statistics).ToList();

            return(Connection.Fetch(handler, IdentityMap.ForQuery(), Statistics, Tenant));
        }
예제 #4
0
 public OneResultHandler(int rowLimit, LinqQuery <T> linqQuery,
                         bool canBeNull = true, bool canBeMultiples = true)
 {
     _rowLimit       = rowLimit;
     _linqQuery      = linqQuery;
     _canBeNull      = canBeNull;
     _canBeMultiples = canBeMultiples;
 }
 public LinqQuery VisitQuery(ExpressionSyntax query, ExpressionSyntax source)
 {
     _query = new LinqQuery {
         Expression = query, SourceCollection = source
     };
     _query = new LinqQuery {
         Expression = query, SourceCollection = source
     };
     Visit(query);
     return(_query);
 }
예제 #6
0
        public ILinqQueryable <T> AsQueryable <T>()
        {
            if (typeof(T) == typeof(object))
            {
                return(new PlaceHolderQuery <T>(this).AsQueryable());
            }

            var linqQuery = new LinqQuery <T>(this);

            return(linqQuery.AsQueryable());
        }
예제 #7
0
        private Task <TResult> executeAsync <TResult>(Func <LinqQuery <T>, IQueryHandler <TResult> > source,
                                                      CancellationToken token)
        {
            var query = ToQueryModel();

            Tenant.EnsureStorageExists(query.SourceType());

            var linq = new LinqQuery <T>(Store, query, Includes.ToArray(), Statistics);

            var handler = source(linq);

            return(Executor.Connection.FetchAsync(handler, Executor.IdentityMap.ForQuery(), Statistics, Tenant, token));
        }
예제 #8
0
        private IQueryHandler <T> tryFindSingleQuery <T>(QueryModel model, IIncludeJoin[] joins, QueryStatistics stats)
        {
            var choice = model.FindOperators <ChoiceResultOperatorBase>().FirstOrDefault();

            if (choice == null)
            {
                return(null);
            }

            var query = new LinqQuery <T>(_store, model, joins, stats);

            if (choice is FirstResultOperator)
            {
                return(choice.ReturnDefaultWhenEmpty
                    ? OneResultHandler <T> .FirstOrDefault(query)
                    : OneResultHandler <T> .First(query));
            }

            if (choice is SingleResultOperator)
            {
                return(choice.ReturnDefaultWhenEmpty
                    ? OneResultHandler <T> .SingleOrDefault(query)
                    : OneResultHandler <T> .Single(query));
            }

            if (choice is MinResultOperator)
            {
                return(AggregateQueryHandler <T> .Min(query));
            }

            if (choice is MaxResultOperator)
            {
                return(AggregateQueryHandler <T> .Max(query));
            }

            if (model.HasOperator <LastResultOperator>())
            {
                throw new InvalidOperationException(
                          "Marten does not support Last()/LastOrDefault(). Use reverse ordering and First()/FirstOrDefault() instead");
            }
            return(null);
        }
        private async Task <Document> Execute(Document document, LinqQuery query, string requestedMethodName, CancellationToken cancellationToken)
        {
            var editor = await DocumentEditor.CreateAsync(document, cancellationToken);

            var steps = query.Steps.Where(x => x.Name == "AsNoTracking" || x.Name == "AsTracking").ToList();

            if (steps.Any())
            {
                var s = steps.Last();
                editor.ReplaceNode(s.Invocation.Expression, ((MemberAccessExpressionSyntax)s.Invocation.Expression).WithName(IdentifierName(requestedMethodName)));
            }
            else
            {
                editor.ReplaceNode(query.SourceCollection,
                                   InvocationExpression(
                                       MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
                                                              query.SourceCollection, IdentifierName(requestedMethodName))));
                // context.Things.ToList() -> context.Things.AsNoTracking().ToList();
            }
            return(editor.GetChangedDocument());
        }
예제 #10
0
 public ListQueryHandler(LinqQuery <T> query)
 {
     _query = query;
 }
예제 #11
0
 public static IQueryHandler <T> FirstOrDefault(LinqQuery <T> query)
 {
     return(new OneResultHandler <T>(1, query, true, true));
 }
예제 #12
0
 public static IQueryHandler <T> SingleOrDefault(LinqQuery <T> query)
 {
     return(new OneResultHandler <T>(2, query, true, false));
 }
예제 #13
0
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public IList <DicEnumEntity> GetDicEnumList(int pageSize, int pageIndex, ref int recordCount, IList <ConditionUnit> wherelist)
        {
            string _keyword  = "";
            int    _pid      = -1;
            string _cachekey = SysCacheKey.DicEnumListKey;
            object _objcache = MemCache.GetCache(_cachekey);

            List <DicEnumEntity> _objlistall = null;//总数

            if (_objcache != null)
            {
                _objlistall = (List <DicEnumEntity>)_objcache;
            }
            if (wherelist != null && wherelist.Count > 0)
            {
                foreach (ConditionUnit entity in wherelist)
                {
                    switch (entity.FieldName)
                    {
                    case SearchFieldName.SeachDefault:
                    {
                        if (entity.CompareValue != null)
                        {
                            _keyword = StringUtils.GetDbString(entity.CompareValue);
                            if (_objcache != null)
                            {
                                var templist = from c in _objlistall
                                               where c.Code.Contains(_keyword) || c.Name.Contains(_keyword)
                                               orderby c.Name
                                               select c;
                                _objlistall = templist.ToList <DicEnumEntity>();
                            }
                        }
                    }
                    break;

                    case SearchFieldName.ParentId:
                    {
                        _pid = StringUtils.GetDbInt(entity.CompareValue);
                        if (_objcache != null)
                        {
                            var templist = from c in _objlistall
                                           where c.ParentId == StringUtils.GetDbInt(entity.CompareValue)
                                           orderby c.Name
                                           select c;
                            _objlistall = templist.ToList <DicEnumEntity>();
                        }
                    }
                    break;

                    default: break;
                    }
                }
            }
            //  _cachekey = SysCacheKey.DicListKey + "_" + pageSize.ToString() + "_" + pageIndex.ToString() + "_" + keyword + "_" + pid;
            //  obj = MemCache.GetCache(_cachekey);
            //if (obj != null)
            //{
            //    return (IList<DicEnumEntity>)obj;
            //}
            //else
            //{

            IList <DicEnumEntity> list = null;

            if (pageIndex == 0)
            {
                pageIndex = 1;
            }
            if (_objcache != null && _objlistall != null && _objlistall.Count > 0)
            {
                list = LinqQuery.QueryByPage <DicEnumEntity>(pageSize, pageIndex, _objlistall);
            }
            else
            {
                list = DicEnumDA.Instance.GetDicEnumList(pageSize, pageIndex, ref recordCount, _keyword, _pid);
            }
            //MemCache.AddCache(_cachekey, list);
            return(list);
            //}
        }
예제 #14
0
 public JsonQueryHandler(LinqQuery <string> query)
 {
     _query = query;
 }