コード例 #1
0
        private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterToken SearchTypeToken, SearchParameterTokenValue SearchValue)
        {
            var Expression = Search.TokenCollectionAnyEqualTo(SearchTypeToken.Id, SearchValue.Code, SearchValue.System, SearchValue.SearchType);

            NewPredicate = NewPredicate.Or(Expression);
            return(NewPredicate);
        }
コード例 #2
0
        private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterDateTime SearchTypeDateTime, SearchParameterDateTimeValue SearchValue)
        {
            var Expression = Search.DateTimePeriodCollectionAnyEqualTo(SearchTypeDateTime.Id, SearchValue.Value, FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision));

            NewPredicate = NewPredicate.Or(Expression);
            return(NewPredicate);
        }
コード例 #3
0
        private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterNumber SearchTypeNumber, SearchParameterNumberValue SearchValue)
        {
            var Expression = Search.NumberCollectionAnyEqualTo(SearchTypeNumber.Id, Common.Tools.DecimalSupport.CalculateLowNumber(SearchValue.Value, SearchValue.Scale), SearchValue.Value, Common.Tools.DecimalSupport.CalculateHighNumber(SearchValue.Value, SearchValue.Scale));

            NewPredicate = NewPredicate.Or(Expression);
            return(NewPredicate);
        }
コード例 #4
0
        public E <LocalStr> ModifyPlaylist(string listId, Action <Playlist, string> action)
        {
            var checkName = Util.IsSafeFileName(listId);

            if (!checkName.Ok)
            {
                return(checkName.Error);
            }
            var res = playlistPool.ReadFull(listId);

            if (!res.Ok)
            {
                return(res.Error);
            }

            var(list, id) = res.Value;
            lock (listLock)
            {
                action(list, id);
            }

            var ret = playlistPool.Write(id, list);

            ResourceSearch?.Rebuild();
            return(ret);
        }
コード例 #5
0
        private static ExpressionStarter <ResCurrentType> CollectionEqualToPredicate(ResourceSearchExpressionTrees <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterComposite SearchTypeComposite, SearchParameterCompositeValue SearchValue, IPrimaryServiceRootCache IPrimaryServiceRootCache)
        {
            var _ResourceSearch = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(IPrimaryServiceRootCache);
            var Expression      = _ResourceSearch.ANDSearchParameterListPredicateGenerator(SearchValue.SearchParameterBaseList);

            NewPredicate = NewPredicate.Or(Expression);
            return(NewPredicate);
        }
コード例 #6
0
        public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem)
        {
            if (SearchItem is SearchParameterToken)
            {
                var SearchTypeToken = SearchItem as SearchParameterToken;
                foreach (var SearchValue in SearchTypeToken.ValueList)
                {
                    if (!SearchTypeToken.Modifier.HasValue)
                    {
                        NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeToken, SearchValue);
                    }
                    else
                    {
                        switch (SearchTypeToken.Modifier)
                        {
                        case SearchParameter.SearchModifierCode.Missing:
                            if (SearchValue.IsMissing)
                            {
                                NewPredicate = NewPredicate.Or(Search.SearchParameterIsNull <ResIndexTokenType>(SearchTypeToken.Id));
                            }
                            else
                            {
                                NewPredicate = NewPredicate.Or(Search.SearchParameterIdIsNotNull <ResIndexTokenType>(SearchTypeToken.Id));
                            }
                            break;

                        case SearchParameter.SearchModifierCode.Exact:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.Contains:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.Text:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.Type:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.Below:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.Above:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.In:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        case SearchParameter.SearchModifierCode.NotIn:
                            throw new FormatException($"The search modifier: {SearchTypeToken.Modifier.ToString()} is not supported for search parameter types of Token.");

                        default:
                            throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeToken.Modifier.ToString(), (int)SearchTypeToken.Modifier, typeof(SearchParameter.SearchModifierCode));
                        }
                    }
                }
            }
            return(NewPredicate);
        }
コード例 #7
0
        private static ExpressionStarter <ResCurrentType> Equals(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewLastUpdatedPredicate, SearchParameterDateTimeValue SearchValue)
        {
            var ExpressionLow  = Search.LastUpdatedPropertyGreaterThanOrEqualTo(SearchValue.Value);
            var ExpressionHigh = Search.LastUpdatedPropertyLessThanOrEqualTo(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision));
            var Expression     = ExpressionLow.And(ExpressionHigh);

            NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(Expression);
            return(NewLastUpdatedPredicate);
        }
コード例 #8
0
        public ActionResult GetResourceGroups(ResourceSearch search)
        {
            ResourceBll resourceBll  = new ResourceBll();
            var         resourceList = resourceBll.GetPagingResourceGroup(search.Pagination, search.Id, search.Name, search.Grade,
                                                                          search.GroupType);
            var viewModels = resourceList.ConvertTo <List <ResourceGroupViewModel> >();
            var table      = AbhsTableFactory.Create(viewModels, search.Pagination.TotalCount);

            return(Json(table, JsonRequestBehavior.AllowGet));
        }
コード例 #9
0
        public ActionResult GetPagingMediaResource(ResourceSearch search)
        {
            ResourceBll resourceBll  = new ResourceBll();
            var         resourceList = resourceBll.GetPagingMediaResource(search.Pagination, search.Id, search.NameOrKey, search.Grade,
                                                                          search.MediaType);
            List <MediaResourceViewModel> list = resourceList.ConvertTo <List <MediaResourceViewModel> >();
            var table = AbhsTableFactory.Create(list, search.Pagination.TotalCount);

            return(Json(table, JsonRequestBehavior.AllowGet));
        }
コード例 #10
0
        public E <LocalStr> DeletePlaylist(string listId)
        {
            var checkName = Util.IsSafeFileName(listId);

            if (!checkName.Ok)
            {
                return(checkName.Error);
            }

            var ret = playlistPool.Delete(listId);

            ResourceSearch?.Rebuild();
            return(ret);
        }
コード例 #11
0
        public E <LocalStr> CreatePlaylist(string listId, Uid owner, string title = null)
        {
            var checkName = Util.IsSafeFileName(listId);

            if (!checkName.Ok)
            {
                return(checkName);
            }
            if (playlistPool.Exists(listId))
            {
                return(new LocalStr("Already exists"));
            }

            var ret = playlistPool.Write(listId, new Playlist(title ?? listId, owner));

            ResourceSearch?.Rebuild();
            return(ret);
        }
コード例 #12
0
ファイル: CommonRepository.cs プロジェクト: eug48/Pyro
        private static void IdSearchParameterPredicateProcessing <
            ResCurrentType,
            ResIndexStringType,
            ResIndexTokenType,
            ResIndexUriType,
            ResIndexReferenceType,
            ResIndexQuantityType,
            ResIndexDateTimeType>(List <ISearchParameterBase> SearchParametersList, ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> MainPredicate)
            where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new()
            where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>

        {
            var IdSearchParamerterList = SearchParametersList.Where(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_id");

            if (IdSearchParamerterList != null)
            {
                ExpressionStarter <ResCurrentType> NewIdPredicate = null;
                foreach (var IdSearchParameter in IdSearchParamerterList)
                {
                    if (IdSearchParameter is SearchParameterToken SearchTypeToken)
                    {
                        NewIdPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>();
                        foreach (var SearchValue in SearchTypeToken.ValueList)
                        {
                            if (!SearchTypeToken.Modifier.HasValue)
                            {
                                var Expression = Search.TokenMainAnyEqualTo(SearchValue.Code);
                                NewIdPredicate = NewIdPredicate.Or(Expression);
                            }
                        }
                    }
                    MainPredicate.Extend <ResCurrentType>(NewIdPredicate, PredicateOperator.And);
                }
                SearchParametersList.RemoveAll(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_id");
            }
        }
コード例 #13
0
ファイル: CommonRepository.cs プロジェクト: eug48/Pyro
        protected ExpressionStarter <ResCurrentType> PredicateResourceIdAndLastUpdatedDate <
            ResCurrentType,
            ResIndexStringType,
            ResIndexTokenType,
            ResIndexUriType,
            ResIndexReferenceType,
            ResIndexQuantityType,
            ResIndexDateTimeType>(List <ISearchParameterBase> SearchParametersList)
            where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new()
            where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
        {
            var Predicate = LinqKit.PredicateBuilder.New <ResCurrentType>(true);
            var Search    = new ResourceSearch <
                ResCurrentType,
                ResIndexStringType,
                ResIndexTokenType,
                ResIndexUriType,
                ResIndexReferenceType,
                ResIndexQuantityType,
                ResIndexDateTimeType>();

            IdSearchParameterPredicateProcessing(SearchParametersList, Search, Predicate);
            LastUpdatedDatePredicateBuilder <
                ResCurrentType,
                ResIndexStringType,
                ResIndexTokenType,
                ResIndexUriType,
                ResIndexReferenceType,
                ResIndexQuantityType,
                ResIndexDateTimeType> .Build(SearchParametersList, Search, Predicate);

            return(Predicate);
        }
コード例 #14
0
ファイル: Bot.cs プロジェクト: Tommmciu/TS3AudioBot
        public E <string> InitializeBot()
        {
            Log.Info("Bot \"{0}\" connecting to \"{1}\"", config.Name, config.Connect.Address);

            // Registering config changes
            config.Language.Changed += (s, e) =>
            {
                var langResult = LocalizationManager.LoadLanguage(e.NewValue, true);
                if (!langResult.Ok)
                {
                    Log.Error("Failed to load language file ({0})", langResult.Error);
                }
            };
            config.Events.IdleDelay.Changed += (s, e) => EnableIdleTickWorker();
            config.Events.OnIdle.Changed    += (s, e) => EnableIdleTickWorker();

            var builder = new DependencyBuilder(Injector);

            builder.AddModule(this);
            builder.AddModule(config);
            builder.AddModule(Injector);
            builder.AddModule(config.Playlists);
            builder.RequestModule <PlaylistIO>();
            builder.RequestModule <PlaylistManager>();
            builder.AddModule(Id);
            builder.AddModule(new TsFullClient());
            builder.RequestModule <TsBaseFunctions, TsFullClient>();
            builder.RequestModule <Ts3Client>();
            builder.RequestModule <Player>();
            builder.RequestModule <CustomTargetPipe>();
            builder.RequestModule <IVoiceTarget, CustomTargetPipe>();
            builder.RequestModule <SessionManager>();
            builder.RequestModule <ResolveContext>();
            if (!builder.TryCreate <CommandManager>(out var commandManager))
            {
                return("Failed to create commandManager");
            }
            builder.AddModule(commandManager);
            if (config.History.Enabled)
            {
                builder.AddModule(config.History);
                builder.RequestModule <HistoryManager>();
            }
            builder.RequestModule <PlayManager>();

            if (!builder.Build())
            {
                Log.Error("Missing bot module dependency");
                return("Could not load all bot modules");
            }

            {
                var io             = Injector.GetModule <PlaylistIO>();
                var resourceSearch = new ResourceSearch(io);
                Injector.AddModule(resourceSearch);
                var playlistManager = Injector.GetModule <PlaylistManager>();
                playlistManager.ResourceSearch = resourceSearch;
            }

            resourceResolver = Injector.GetModule <ResolveContext>();
            ts3FullClient    = Injector.GetModule <TsFullClient>();
            ts3client        = Injector.GetModule <Ts3Client>();
            player           = Injector.GetModule <Player>();
            player.SetTarget(Injector.GetModule <CustomTargetPipe>());
            Injector.AddModule(ts3FullClient.Book);

            playManager    = Injector.GetModule <PlayManager>();
            targetManager  = Injector.GetModule <IVoiceTarget>();
            sessionManager = Injector.GetModule <SessionManager>();
            stats          = Injector.GetModule <Stats>();

            player.OnSongEnd     += playManager.SongEndedEvent;
            player.OnSongUpdated += (s, e) => playManager.Update(e);
            // Update idle status events
            playManager.BeforeResourceStarted += (s, e) => DisableIdleTickWorker();
            playManager.PlaybackStopped       += (s, e) => EnableIdleTickWorker();
            // Used for the voice_mode script
            playManager.BeforeResourceStarted += BeforeResourceStarted;
            // Update the own status text to the current song title
            playManager.AfterResourceStarted += LoggedUpdateBotStatus;
            playManager.PlaybackStopped      += LoggedUpdateBotStatus;
            playManager.OnResourceUpdated    += LoggedUpdateBotStatus;
            // Log our resource in the history
            if (Injector.TryGet <HistoryManager>(out var historyManager))
            {
                playManager.AfterResourceStarted += (s, e) => historyManager.LogAudioResource(new HistorySaveData(e.PlayResource.BaseData, e.MetaData.ResourceOwnerUid ?? Uid.Null));
            }
            // Update our thumbnail
            playManager.AfterResourceStarted += GenerateStatusImage;
            playManager.PlaybackStopped      += GenerateStatusImage;
            // Stats
            playManager.AfterResourceStarted += (s, e) => stats.TrackSongStart(Id, e.ResourceData.AudioType);
            playManager.ResourceStopped      += (s, e) => stats.TrackSongStop(Id);
            // Register callback for all messages happening
            ts3client.OnMessageReceived += OnMessageReceived;
            // Register callback to remove open private sessions, when user disconnects
            ts3FullClient.OnEachClientLeftView += OnClientLeftView;
            ts3client.OnBotConnected           += OnBotConnected;
            ts3client.OnBotDisconnect          += OnBotDisconnect;
            // Alone mode
            ts3client.OnAloneChanged += OnAloneChanged;
            // Whisper stall
            ts3client.OnWhisperNoTarget += (s, e) => player.SetStall();

            commandManager.RegisterCollection(MainCommands.Bag);
            // TODO remove after plugin rework
            var pluginManager = Injector.GetModule <PluginManager>();

            foreach (var plugin in pluginManager.Plugins)
            {
                if (plugin.Type == PluginType.CorePlugin || plugin.Type == PluginType.Commands)
                {
                    commandManager.RegisterCollection(plugin.CorePlugin.Bag);
                }
            }
            // Restore all alias from the config
            foreach (var alias in config.Commands.Alias.GetAllItems())
            {
                commandManager.RegisterAlias(alias.Key, alias.Value).UnwrapToLog(Log);
            }

            // Connect after everyting is set up
            return(ts3client.Connect());
        }
コード例 #15
0
        public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem)
        {
            if (SearchItem is SearchParameterQuantity)
            {
                var SearchTypeNumber = SearchItem as SearchParameterQuantity;
                foreach (var SearchValue in SearchTypeNumber.ValueList)
                {
                    if (SearchTypeNumber.Modifier.HasValue == false)
                    {
                        if (SearchValue.Prefix.HasValue == false)
                        {
                            NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue);
                        }
                        else
                        {
                            switch (SearchValue.Prefix)
                            {
                            case SearchParameter.SearchComparator.Eq:
                                NewPredicate = CollectionEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue);
                                break;

                            case SearchParameter.SearchComparator.Ne:
                                NewPredicate = CollectionNotEqualToPredicate(Search, NewPredicate, SearchTypeNumber, SearchValue);
                                break;

                            case SearchParameter.SearchComparator.Gt:
                                NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyGreaterThan(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code));
                                break;

                            case SearchParameter.SearchComparator.Lt:
                                NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyLessThan(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code));
                                break;

                            case SearchParameter.SearchComparator.Ge:
                                NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyGreaterThanOrEqualTo(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code));
                                break;

                            case SearchParameter.SearchComparator.Le:
                                NewPredicate = NewPredicate.Or(Search.QuantityCollectionAnyLessThanOrEqualTo(SearchTypeNumber.Id, SearchValue.Value, SearchValue.System, SearchValue.Code));
                                break;

                            case SearchParameter.SearchComparator.Sa:
                                throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity.");

                            case SearchParameter.SearchComparator.Eb:
                                throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity.");

                            case SearchParameter.SearchComparator.Ap:
                                throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity.");

                            default:
                                throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator));
                            }
                        }
                    }
                    else
                    {
                        switch (SearchTypeNumber.Modifier)
                        {
                        case SearchParameter.SearchModifierCode.Missing:
                            if (SearchValue.Prefix.HasValue == false)
                            {
                                if (SearchValue.IsMissing)
                                {
                                    NewPredicate = NewPredicate.Or(Search.SearchParameterIsNull <ResIndexQuantityType>(SearchTypeNumber.Id));
                                }
                                else
                                {
                                    NewPredicate = NewPredicate.Or(Search.SearchParameterIdIsNotNull <ResIndexQuantityType>(SearchTypeNumber.Id));
                                }
                            }
                            else
                            {
                                switch (SearchValue.Prefix)
                                {
                                case SearchParameter.SearchComparator.Eq:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Ne:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Gt:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Lt:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Ge:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Le:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Sa:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Eb:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                case SearchParameter.SearchComparator.Ap:
                                    throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter types of Quantity with a Modifier of: {SearchTypeNumber.Modifier.ToString()}.");

                                default:
                                    throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator));
                                }
                            }
                            break;

                        case SearchParameter.SearchModifierCode.Exact:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.Contains:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.Text:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.Type:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.Below:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.Above:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.In:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        case SearchParameter.SearchModifierCode.NotIn:
                            throw new FormatException($"The search modifier: {SearchTypeNumber.Modifier.ToString()} is not supported for search parameter types of date.");

                        default:
                            throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeNumber.Modifier.Value.GetLiteral(), (int)SearchTypeNumber.Modifier, typeof(SearchParameter.SearchModifierCode));
                        }
                    }
                }
            }
            return(NewPredicate);
        }
コード例 #16
0
        private static ExpressionStarter <ResCurrentType> CollectionNotEqualToPredicate(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterQuantity SearchTypeNumber, SearchParameterQuantityValue SearchValue)
        {
            var NotEqualTo_Expression = Search.QuantityCollectionAllNotEqualTo(
                SearchTypeNumber.Id,
                Common.Tools.DecimalSupport.CalculateLowNumber(SearchValue.Value, SearchValue.Scale),
                SearchValue.Value,
                Common.Tools.DecimalSupport.CalculateHighNumber(SearchValue.Value, SearchValue.Scale),
                SearchValue.System,
                SearchValue.Code);

            var CollectionNotNull_Expression2 = Search.SearchParameterIdIsNotNull <ResIndexQuantityType>(SearchTypeNumber.Id);

            ExpressionStarter <ResCurrentType> NewAndPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>();

            NewAndPredicate = NewAndPredicate.And(NotEqualTo_Expression);
            NewAndPredicate = NewAndPredicate.And(CollectionNotNull_Expression2);

            NewPredicate = NewPredicate.Or(NewAndPredicate);
            return(NewPredicate);
        }
コード例 #17
0
        public static void Build(List <ISearchParameterBase> SearchParametersList, ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> MainPredicate)
        {
            var LastUpdatedSearchParamerterList = SearchParametersList.Where(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_lastUpdated");

            if (LastUpdatedSearchParamerterList != null)
            {
                ExpressionStarter <ResCurrentType> NewLastUpdatedPredicate = null;
                foreach (var LastUpdatedSearchParameter in LastUpdatedSearchParamerterList)
                {
                    if (LastUpdatedSearchParameter is SearchParameterDateTime SearchTypeToken)
                    {
                        NewLastUpdatedPredicate = LinqKit.PredicateBuilder.New <ResCurrentType>();
                        foreach (var SearchValue in SearchTypeToken.ValueList)
                        {
                            if (!SearchTypeToken.Modifier.HasValue)
                            {
                                if (SearchValue.Prefix.HasValue == false)
                                {
                                    NewLastUpdatedPredicate = Equals(Search, NewLastUpdatedPredicate, SearchValue);
                                }
                                else
                                {
                                    switch (SearchValue.Prefix)
                                    {
                                    case SearchParameter.SearchComparator.Eq:
                                        NewLastUpdatedPredicate = Equals(Search, NewLastUpdatedPredicate, SearchValue);
                                        break;

                                    case SearchParameter.SearchComparator.Ne:
                                        throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated.");

                                    case SearchParameter.SearchComparator.Gt:
                                        var ExpressionGreaterThan = Search.LastUpdatedPropertyGreaterThan(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision));
                                        NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionGreaterThan);
                                        break;

                                    case SearchParameter.SearchComparator.Lt:
                                        var ExpressionLessThan = Search.LastUpdatedPropertyLessThan(SearchValue.Value);
                                        NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionLessThan);
                                        break;

                                    case SearchParameter.SearchComparator.Ge:
                                        var ExpressionGreaterThanOrEqualTo = Search.LastUpdatedPropertyGreaterThanOrEqualTo(SearchValue.Value);
                                        NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionGreaterThanOrEqualTo);
                                        break;

                                    case SearchParameter.SearchComparator.Le:
                                        var ExpressionLessThanOrEqualTo = Search.LastUpdatedPropertyLessThanOrEqualTo(FhirDateTimeSupport.CalculateHighDateTimeForRange(SearchValue.Value, SearchValue.Precision));
                                        NewLastUpdatedPredicate = NewLastUpdatedPredicate.Or(ExpressionLessThanOrEqualTo);
                                        break;

                                    case SearchParameter.SearchComparator.Sa:
                                        throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated.");

                                    case SearchParameter.SearchComparator.Eb:
                                        throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated.");

                                    case SearchParameter.SearchComparator.Ap:
                                        throw new FormatException($"The search prefix: {SearchValue.Prefix.ToString()} is not supported for search parameter _lastUpdated.");

                                    default:
                                        throw new System.ComponentModel.InvalidEnumArgumentException(SearchValue.Prefix.Value.GetLiteral(), (int)SearchValue.Prefix, typeof(SearchParameter.SearchComparator));
                                    }
                                }
                            }
                            else
                            {
                                throw new FormatException($"The search Modifiers are not supported for search parameter _lastUpdated. Found modifier {SearchTypeToken.Modifier.Value.GetLiteral()}");
                            }
                        }
                    }
                    MainPredicate.Extend <ResCurrentType>(NewLastUpdatedPredicate, PredicateOperator.And);
                }
                SearchParametersList.RemoveAll(x => x.Resource == FHIRAllTypes.Resource.GetLiteral() && x.Name == "_lastUpdated");
            }
        }
コード例 #18
0
 public CommonRepository(IPyroDbContext IPyroDbContext, IPrimaryServiceRootCache IPrimaryServiceRootCache)
     : base(IPyroDbContext)
 {
     this.IPrimaryServiceRootCache = IPrimaryServiceRootCache;
     _ResourceSearch = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>(IPrimaryServiceRootCache);
 }
コード例 #19
0
        /// <summary>
        /// Invia una richiesta di ricerca al servizio remoto e attende che venga completata.
        /// </summary>
        /// <remarks>
        /// Il lavoro viene eseguito su un nuovo thread.
        /// </remarks>
        private void ExecuteSearch()
        {
            ProcessingServicesList.Clear();
            SelectedProcessingServiceIndex = -1;
            TaskResult = string.Empty;
            ReportText = string.Empty;

            string resourceClassName, resourceClassVersion;
            if (!TryExtractResourceInfo(TaskData, out resourceClassName, out resourceClassVersion))
            {
                UpdateReportText("Errore: impossibile trovare nome e versione del componente di elaborazione.");
                return;
            }

            if (!IsValidUri(SearchNodeUri))
            {
                UpdateReportText("Errore: indirizzo non valido per il servizio di ricerca ({0}).", SearchNodeUri);
                return;
            }

            IsBusy = true;

            new Thread(() =>
            {
                ResourceSearch rs = new ResourceSearch(SearchNodeUri, TimeSpan.FromSeconds(5), 6);
                rs.OnResourceSearchProgress += new ResourceSearchProgressHandler(ResourceSearch_Progress);
                rs.OnResourceSearchCompleted += new ResourceSearchCompletedHandler(ResourceSearch_Completed);

                rs.SetSearchOptions(resourceClassName, resourceClassVersion);
                rs.Start();
            }
            ) { Name = "SearchThread", IsBackground = true }.Start();
        }
コード例 #20
0
        public static ExpressionStarter <ResCurrentType> Build(ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> Search, ExpressionStarter <ResCurrentType> NewPredicate, SearchParameterBase SearchItem, IDtoRootUrlStore PrimaryRootUrlStore)
        {
            if (SearchItem is SearchParameterReferance SearchTypeReference)
            {
                //Improved Query when searching for FhirIds for the same Resource type and search parameter yet different FhirIds.
                //It creates a SQL 'IN' cause instead of many 'OR' statements and should be more efficient.
                //Heavily used in chain searching where we traverse many References.
                //The 'Type' modifier is already resolved when the search parameter is parsed, so the SearchValue.FhirRequestUri.ResourseName is the correct Resource name at this stage
                if (SearchTypeReference.ValueList.Count > 1 && SearchTypeReference.ValueList.TrueForAll(x =>
                                                                                                        x.FhirRequestUri.IsRelativeToServer &&
                                                                                                        x.FhirRequestUri.ResourseName == SearchTypeReference.ValueList[0].FhirRequestUri.ResourseName &&
                                                                                                        string.IsNullOrWhiteSpace(x.FhirRequestUri.VersionId)))
                {
                    string[] ReferenceFhirIdArray = SearchTypeReference.ValueList.Select(x => x.FhirRequestUri.ResourceId).ToArray();
                    NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey_Many_FhirIds(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchTypeReference.ValueList[0].FhirRequestUri.ResourseName, ReferenceFhirIdArray, SearchTypeReference.ValueList[0].FhirRequestUri.VersionId));
                    return(NewPredicate);
                }

                foreach (var SearchValue in SearchTypeReference.ValueList)
                {
                    if (!SearchTypeReference.Modifier.HasValue)
                    {
                        if (IsServiceUrlPrimary(PrimaryRootUrlStore, SearchValue))
                        {
                            NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId));
                        }
                        else
                        {
                            NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByUrlString(SearchTypeReference.Id, SearchValue.FhirRequestUri.UriPrimaryServiceRoot.OriginalString.StripHttp().ToLower(), SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId));
                        }
                    }
                    else
                    {
                        switch (SearchTypeReference.Modifier)
                        {
                        case SearchParameter.SearchModifierCode.Missing:
                            if (SearchValue.IsMissing)
                            {
                                NewPredicate = NewPredicate.Or(Search.ReferanceCollectionIsNull(SearchTypeReference.Id));
                            }
                            else
                            {
                                NewPredicate = NewPredicate.Or(Search.ReferanceCollectionIsNotNull(SearchTypeReference.Id));
                            }
                            break;

                        case SearchParameter.SearchModifierCode.Exact:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.Contains:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.Text:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.Type:
                            //The 'Type' modifier is already resolved when the search parameter is parsed, so the SearchValue.FhirRequestUri.ResourseName is the correct Resource name at this stage
                            if (IsServiceUrlPrimary(PrimaryRootUrlStore, SearchValue))
                            {
                                NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByKey(SearchTypeReference.Id, PrimaryRootUrlStore.Id, SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId));
                            }
                            else
                            {
                                NewPredicate = NewPredicate.Or(Search.ReferanceCollectionAnyEqualTo_ByUrlString(SearchTypeReference.Id, SearchValue.FhirRequestUri.UriPrimaryServiceRoot.OriginalString.StripHttp().ToLower(), SearchValue.FhirRequestUri.ResourseName, SearchValue.FhirRequestUri.ResourceId, SearchValue.FhirRequestUri.VersionId));
                            }
                            break;

                        case SearchParameter.SearchModifierCode.Below:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.Above:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.In:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        case SearchParameter.SearchModifierCode.NotIn:
                            throw new FormatException($"The search modifier: {SearchTypeReference.Modifier.ToString()} is not supported for search parameter types of Reference.");

                        default:
                            throw new System.ComponentModel.InvalidEnumArgumentException(SearchTypeReference.Modifier.ToString(), (int)SearchTypeReference.Modifier, typeof(SearchParameter.SearchModifierCode));
                        }
                    }
                }
            }
            return(NewPredicate);
        }
コード例 #21
0
ファイル: CommonRepository.cs プロジェクト: eug48/Pyro
        protected ExpressionStarter <ResCurrentType> PredicateSearchParameter <
            ResCurrentType,
            ResIndexStringType,
            ResIndexTokenType,
            ResIndexUriType,
            ResIndexReferenceType,
            ResIndexQuantityType,
            ResIndexDateTimeType>(SearchParameterBase SearchItem)
            where ResCurrentType : ResourceCurrentBase <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexStringType : ResourceIndexString <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexTokenType : ResourceIndexToken <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexUriType : ResourceIndexUri <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>, new()
            where ResIndexReferenceType : ResourceIndexReference <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexQuantityType : ResourceIndexQuantity <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
            where ResIndexDateTimeType : ResourceIndexDateTime <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>
        {
            var Search = new ResourceSearch <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType>();
            ExpressionStarter <ResCurrentType> Predicate = LinqKit.PredicateBuilder.New <ResCurrentType>();

            switch (SearchItem.Type)
            {
            case SearchParamType.Date:
                Predicate = DateTimePeriodPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);

                break;

            case SearchParamType.Number:
            {
                if (SearchItem is SearchParameterNumber)
                {
                    var SearchTypeNumber = SearchItem as SearchParameterNumber;
                    foreach (var SearchValue in SearchTypeNumber.ValueList)
                    {
                        if (SearchTypeNumber.Name != "page")
                        {
                            //ToDo: more needed here
                        }
                    }
                }
                Predicate = NumberPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);
            }
            break;

            case SearchParamType.Quantity:
                Predicate = QuantityPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);

                break;

            case SearchParamType.Reference:
                Predicate = ReferancePredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem, IPrimaryServiceRootCache.GetPrimaryRootUrlFromDatabase());

                break;

            case SearchParamType.String:
                Predicate = StringPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);

                break;

            case SearchParamType.Token:
                Predicate = TokenPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);

                break;

            case SearchParamType.Uri:
                Predicate = UriPredicateBuilder <ResCurrentType, ResIndexStringType, ResIndexTokenType, ResIndexUriType, ResIndexReferenceType, ResIndexQuantityType, ResIndexDateTimeType> .Build(Search, Predicate, SearchItem);

                break;

            default:
                throw new System.ComponentModel.InvalidEnumArgumentException(SearchItem.Type.ToString(), (int)SearchItem.Type, typeof(SearchParamType));
            }
            return(Predicate);
        }
コード例 #22
0
        public async Task <ActionResult> Filter(ResourceSearch specifiedResource)
        {
            IQueryable <Resource> resources = db.Resources.Include(r => r.Disaster)
                                              .Include(r => r.Person)
                                              .Include(r => r.ResourceType);

            if (specifiedResource.Description != null)
            {
                resources = resources.Where(x => x.Description.Contains(specifiedResource.Description));
            }

            if (specifiedResource.NullableCreatedDate != null)
            {
                resources = resources.Where(x => DbFunctions.TruncateTime(x.EntryMade) == DbFunctions.TruncateTime(specifiedResource.NullableCreatedDate));
            }

            if (specifiedResource.NullableStartDate != null)
            {
                resources = resources.Where(x => DbFunctions.TruncateTime(x.StartOfAvailability) == DbFunctions.TruncateTime(specifiedResource.NullableStartDate));
            }

            if (specifiedResource.NullableEndDate != null)
            {
                resources = resources.Where(x => DbFunctions.TruncateTime(x.EndOfAvailability) == DbFunctions.TruncateTime(specifiedResource.NullableEndDate));
            }

            if (specifiedResource.Location.AddressLine1 != null)
            {
                resources = resources.Where(x => x.Location.AddressLine1.Contains(specifiedResource.Location.AddressLine1));
            }

            if (specifiedResource.Location.AddressLine2 != null)
            {
                resources = resources.Where(x => x.Location.AddressLine2.Contains(specifiedResource.Location.AddressLine2));
            }

            if (specifiedResource.Location.AddressLine3 != null)
            {
                resources = resources.Where(x => x.Location.AddressLine3.Contains(specifiedResource.Location.AddressLine3));
            }

            if (specifiedResource.Location.City != null)
            {
                resources = resources.Where(x => x.Location.City.Contains(specifiedResource.Location.City));
            }

            if (specifiedResource.Location.County != null)
            {
                resources = resources.Where(x => x.Location.County.Contains(specifiedResource.Location.County));
            }

            if (specifiedResource.Location.State != null)
            {
                resources = resources.Where(x => x.Location.State.Contains(specifiedResource.Location.State));
            }

            if (specifiedResource.Location.Country != null)
            {
                resources = resources.Where(x => x.Location.Country.Contains(specifiedResource.Location.Country));
            }

            if (specifiedResource.Location.PostalCode != null)
            {
                resources = resources.Where(x => x.Location.PostalCode.Contains(specifiedResource.Location.PostalCode));
            }

            if (specifiedResource.Qty > 0.1m)
            {
                resources = resources.Where(x => x.Qty == specifiedResource.Qty);
            }

            if (specifiedResource.SelectedResourceTypeId != ResourceSearch.GeneralSelectId)
            {
                resources = resources.Where(x => x.ResourceTypeId == specifiedResource.SelectedResourceTypeId);
            }

            if (specifiedResource.SelectedDisasterId != ResourceSearch.GeneralSelectId)
            {
                resources = resources.Where(x => x.DisasterId == specifiedResource.SelectedDisasterId);
            }

            if (specifiedResource.Status != ResourceStatus.All)
            {
                resources = resources.Where(x => x.Status == specifiedResource.Status);
            }

            return(View("Index", new AdminResourceIndexViewModel()
            {
                Resources = resources,
                ResourceSearch = new ResourceSearch(await db.Disasters.ToListAsync(), await db.ResourceTypes.ToListAsync())
            }));
        }
コード例 #23
0
 public PlaylistManager(PlaylistDatabase database, ResourceSearch resourceSearch)
 {
     this.database       = database;
     this.resourceSearch = resourceSearch;
 }