コード例 #1
0
ファイル: HistorianBase.cs プロジェクト: lulzzz/aika
 /// <summary>
 /// Gets the tags that match the specified filter.
 /// </summary>
 /// <param name="identity">The identity of the caller.</param>
 /// <param name="filter">The tag search filter.</param>
 /// <param name="cancellationToken">The cancellation token for the request.</param>
 /// <returns>
 /// A collection of matching tags.
 /// </returns>
 protected abstract Task <IEnumerable <TagDefinition> > FindTags(ClaimsPrincipal identity, TagDefinitionFilter filter, CancellationToken cancellationToken);
コード例 #2
0
        /// <summary>
        /// Gets the tags that match the specified filter.
        /// </summary>
        /// <param name="identity">The identity of the caller.</param>
        /// <param name="filter">The tag search filter.</param>
        /// <param name="cancellationToken">The cancellation token for the request.</param>
        /// <returns>
        /// A collection of matching tags.
        /// </returns>
        protected override Task <IEnumerable <TagDefinition> > FindTags(ClaimsPrincipal identity, TagDefinitionFilter filter, CancellationToken cancellationToken)
        {
            IEnumerable <TagDefinition> allTags = _tags.Values;
            var result = filter.FilterType == TagDefinitionFilterJoinType.And
                ? (IEnumerable <TagDefinition>)_tags.Values
                : new TagDefinition[0];

            foreach (var clause in filter.FilterClauses)
            {
                switch (clause.Field)
                {
                case TagDefinitionFilterField.Name:
                    if (filter.FilterType == TagDefinitionFilterJoinType.And)
                    {
                        result = result.Where(x => x.Name.Like(clause.Value));
                    }
                    else
                    {
                        result = result.Concat(allTags.Where(x => x.Name.Like(clause.Value)));
                    }
                    break;

                case TagDefinitionFilterField.Description:
                    if (filter.FilterType == TagDefinitionFilterJoinType.And)
                    {
                        result = result.Where(x => x.Description?.Like(clause.Value) ?? false);
                    }
                    else
                    {
                        result = result.Concat(allTags.Where(x => x.Description?.Like(clause.Value) ?? false));
                    }
                    break;

                case TagDefinitionFilterField.Units:
                    if (filter.FilterType == TagDefinitionFilterJoinType.And)
                    {
                        result = result.Where(x => x.Units?.Like(clause.Value) ?? false);
                    }
                    else
                    {
                        result = result.Concat(allTags.Where(x => x.Units?.Like(clause.Value) ?? false));
                    }
                    break;
                }
            }

            if (filter.FilterType == TagDefinitionFilterJoinType.Or)
            {
                result = result.Distinct();
            }

            return(Task.FromResult <IEnumerable <TagDefinition> >(result.OrderBy(x => x.Name, StringComparer.OrdinalIgnoreCase).Skip((filter.Page - 1) * filter.PageSize).Take(filter.PageSize).ToArray()));
        }
コード例 #3
0
ファイル: HistorianBase.cs プロジェクト: lulzzz/aika
 /// <summary>
 /// Gets the tags that match the specified filter.
 /// </summary>
 /// <param name="identity">The identity of the caller.</param>
 /// <param name="filter">The tag search filter.</param>
 /// <param name="cancellationToken">The cancellation token for the request.</param>
 /// <returns>
 /// A collection of matching tags.
 /// </returns>
 async Task <IEnumerable <TagDefinition> > IHistorian.FindTags(ClaimsPrincipal identity, TagDefinitionFilter filter, CancellationToken cancellationToken)
 {
     ThrowIfDisposed();
     return(await FindTags(identity, filter, cancellationToken).ConfigureAwait(false));
 }