예제 #1
0
        protected async Task <List <TView> > GetListAsync <TView>(Expression <Func <TModel, bool> > predicate, string key, ODataQueryOptions <TModel> queryOptions)
            where TView : ODataViewModelBase <TDbContext, TModel, TView>
        {
            if (queryOptions.Filter != null)
            {
                ODataHelper <TModel> .ParseFilter(queryOptions.Filter.FilterClause.Expression, ref predicate);
            }
            int?          top     = queryOptions.Top?.Value;
            var           skip    = queryOptions.Skip?.Value ?? 0;
            RequestPaging request = new RequestPaging()
            {
                PageIndex = 0,
                PageSize  = top.HasValue ? top + top * (skip / top + 1) : null,
                OrderBy   = queryOptions.OrderBy?.RawValue
                            //Top = queryOptions.Top?.Value,
                            //Skip = queryOptions.Skip?.Value
            };
            var          cacheKey = $"odata_{_lang}_{typeof(TView).FullName}_{key}_{SeoHelper.GetSEOString(queryOptions.Filter?.RawValue, '_')}_ps-{request.PageSize}";
            List <TView> data     = null;

            //if (MixService.GetConfig<bool>("IsCache"))
            //{
            //    var getData = await MixCacheService.GetAsync<RepositoryResponse<PaginationModel<TView>>>(cacheKey);
            //    if (getData != null)
            //    {
            //        data = getData.Data.Items;
            //    }
            //}

            if (data == null)
            {
                if (predicate != null)
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListByAsync(predicate,
                                                                                                                         request.OrderBy, request.Direction, request.PageSize, request.PageIndex, request.Skip, request.Top).ConfigureAwait(false);

                    //if (getData.IsSucceed)
                    //{
                    //    await MixCacheService.SetAsync(cacheKey, getData);
                    //    data = getData.Data.Items;
                    //}
                }
                else
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListAsync(
                        request.OrderBy, request.Direction, request.PageSize, request.PageIndex
                        , null, null).ConfigureAwait(false);

                    //if (getData.IsSucceed)
                    //{
                    //    await MixCacheService.SetAsync(cacheKey, getData);
                    //    data = getData.Data.Items;
                    //}
                }
            }

            return(data);
        }
예제 #2
0
        protected async Task <List <TView> > GetListAsync <TView>(Expression <Func <TModel, bool> > predicate, ODataQueryOptions <TModel> queryOptions)
            where TView : ODataViewModelBase <TDbContext, TModel, TView>
        {
            Expression <Func <TModel, bool> > pre = null;

            if (queryOptions.Filter != null)
            {
                ODataHelper <TModel> .ParseFilter(queryOptions.Filter.FilterClause.Expression, ref pre);

                predicate = ODataHelper <TModel> .CombineExpression(predicate, pre, Microsoft.OData.UriParser.BinaryOperatorKind.And);
            }

            int?          top     = queryOptions.Top?.Value;
            var           skip    = queryOptions.Skip?.Value ?? 0;
            RequestPaging request = new RequestPaging()
            {
                PageIndex = 0,
                PageSize  = top.HasValue ? top + top * (skip / top + 1) : null,
                OrderBy   = queryOptions.OrderBy?.RawValue
            };
            List <TView> data = null;

            if (data == null)
            {
                if (predicate != null)
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListByAsync(predicate,
                                                                                                                         request.OrderBy, request.Direction, request.PageSize, request.PageIndex, request.Skip, request.Top).ConfigureAwait(false);

                    if (getData.IsSucceed)
                    {
                        //await MixCacheService.SetAsync(cacheKey, getData);
                        data = getData.Data.Items;
                    }
                }
                else
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListAsync(
                        request.OrderBy, request.Direction, request.PageSize, request.PageIndex
                        , null, null).ConfigureAwait(false);

                    if (getData.IsSucceed)
                    {
                        //await MixCacheService.SetAsync(cacheKey, getData);
                        data = getData.Data.Items;
                    }
                }
            }

            return(data);
        }
예제 #3
0
        protected async Task <List <TView> > GetListAsync <TView>(ODataQueryOptions <TModel> queryOptions)
            where TView : ODataViewModelBase <TDbContext, TModel, TView>
        {
            Expression <Func <TModel, bool> > predicate = null;

            if (queryOptions.Filter != null)
            {
                ODataHelper <TModel> .ParseFilter(queryOptions.Filter.FilterClause.Expression, ref predicate);
            }
            int?top  = queryOptions.Top?.Value;
            var skip = queryOptions.Skip?.Value ?? 0;

            // TODO: OData need to load all data for filter (optimize for bid data)
            RequestPaging request = new RequestPaging()
            {
                PageIndex = 0,
                PageSize  = top.HasValue ? top + top * (skip / top + 1) : null,
                OrderBy   = queryOptions.OrderBy?.RawValue,
                Top       = queryOptions.Top?.Value,
                Skip      = queryOptions.Skip?.Value
            };
            List <TView> data = null;

            if (data == null)
            {
                if (predicate != null)
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListByAsync(predicate,
                                                                                                                         request.OrderBy, request.Direction, request.PageSize, request.PageIndex, request.Skip, request.Top).ConfigureAwait(false);

                    if (getData.IsSucceed)
                    {
                        data = getData.Data.Items;
                    }
                }
                else
                {
                    var getData = await ODataDefaultRepository <TDbContext, TModel, TView> .Instance.GetModelListAsync(
                        request.OrderBy, request.Direction, request.PageSize, request.PageIndex
                        , null, null).ConfigureAwait(false);

                    if (getData.IsSucceed)
                    {
                        data = getData.Data.Items;
                    }
                }
            }

            return(data);
        }