コード例 #1
0
            public List <IQueryFilter> GetFilters()
            {
                var result = new List <IQueryFilter>();
                var refObj = new MdMerchandise();

                if (!string.IsNullOrEmpty(this.MaLoaiVatTu))
                {
                    var          codeTypes          = this.MaLoaiVatTu.Split(',').ToList();
                    IQueryFilter queryFilterByGroup = new QueryFilterLinQ();
                    if (this.MaNhomVatTu != null)
                    {
                        var codeGroups = this.MaNhomVatTu.Split(',').ToList();
                        queryFilterByGroup.Method   = FilterMethod.In;
                        queryFilterByGroup.Value    = codeGroups;
                        queryFilterByGroup.Property = ClassHelper.GetProperty(() => refObj.MaNhomVatTu);
                    }

                    result.Add(new QueryFilterLinQ
                    {
                        Method     = FilterMethod.And,
                        SubFilters = new List <IQueryFilter>()
                        {
                            new QueryFilterLinQ()
                            {
                                Property = ClassHelper.GetProperty(() => refObj.MaLoaiVatTu),
                                Value    = codeTypes,
                                Method   = FilterMethod.In
                            },
                            queryFilterByGroup,
                            new QueryFilterLinQ()
                            {
                                Method     = FilterMethod.Or,
                                SubFilters = new List <IQueryFilter>()
                                {
                                    new QueryFilterLinQ
                                    {
                                        Property = ClassHelper.GetProperty(() => refObj.TenHang),
                                        Value    = this.TenVatTu,
                                        Method   = FilterMethod.Like
                                    },
                                    new QueryFilterLinQ
                                    {
                                        Property = ClassHelper.GetProperty(() => refObj.MaVatTu),
                                        Value    = this.MaVatTu,
                                        Method   = FilterMethod.Like
                                    }
                                }
                            }
                        }
                    });
                }
                else
                {
                    result.Add(new QueryFilterLinQ()
                    {
                        Method     = FilterMethod.Or,
                        SubFilters = new List <IQueryFilter>()
                        {
                            new QueryFilterLinQ
                            {
                                Property = ClassHelper.GetProperty(() => refObj.TenHang),
                                Value    = this.TenVatTu,
                                Method   = FilterMethod.Like
                            },
                            new QueryFilterLinQ
                            {
                                Property = ClassHelper.GetProperty(() => refObj.MaVatTu),
                                Value    = this.MaVatTu,
                                Method   = FilterMethod.Like
                            }
                        }
                    });
                }

                return(result);
            }
コード例 #2
0
ファイル: Service.cs プロジェクト: tete1236366666/QLD
        public async Task <ResultObj <PagedObj <TEntity> > > FilterAsync <TSearch>(FilterObj <TSearch> filtered, IQueryBuilder query = null) where TSearch : IDataSearch
        {
            query = query ?? new QueryBuilder();
            var advanceData = filtered.AdvanceData;

            if (!filtered.IsAdvance)
            {
                advanceData.LoadGeneralParam(filtered.Summary);
            }
            var filters = advanceData.GetFilters();

            if (filters.Count > 0)
            {
                var newQuery = new QueryFilterLinQ
                {
                    Method     = filtered.IsAdvance ? FilterMethod.And : FilterMethod.Or,
                    SubFilters = filters,
                };
                if (query.Filter == null)
                {
                    query.Filter = newQuery;
                }
                else
                {
                    query.Filter.MergeFilter(newQuery);
                }
            }
            var quickFilters = advanceData.GetQuickFilters();

            if (quickFilters != null && quickFilters.Any())
            {
                var newQuery = new QueryFilterLinQ
                {
                    Method     = FilterMethod.And,
                    SubFilters = quickFilters,
                };
                if (query.Filter == null)
                {
                    query.Filter = newQuery;
                }
                else
                {
                    query.Filter.MergeFilter(newQuery);
                }
            }
            // load order
            if (!string.IsNullOrEmpty(filtered.OrderBy))
            {
                query.OrderBy(new QueryOrder
                {
                    Field      = filtered.OrderBy,
                    MethodName = filtered.OrderType
                });
            }
            // at lease one order for paging
            if (query.Orders.Count == 0)
            {
                query.OrderBy(new QueryOrder {
                    Field = advanceData.DefaultOrder
                });
            }
            // query
            var result = new ResultObj <PagedObj <TEntity> >();

            try
            {
                var data = await QueryPagedAsync(query);

                result.Value = data;
                result.State = ResultState.Success;
            }
            catch (Exception ex)
            {
                result.SetException = ex;
            }
            return(result);
        }