public QueryParser()

in src/Microsoft.Health.Dicom.Core/Features/Query/QueryParser.cs [77:137]


        public QueryParser(IDicomTagParser dicomTagPathParser)
            => _dicomTagPathParser = EnsureArg.IsNotNull(dicomTagPathParser, nameof(dicomTagPathParser));

        public QueryExpression Parse(QueryParameters parameters, IReadOnlyCollection<QueryTag> queryTags)
        {
            EnsureArg.IsNotNull(parameters, nameof(parameters));
            EnsureArg.IsNotNull(queryTags, nameof(queryTags));

            // Update the list of query tags
            queryTags = GetQualifiedQueryTags(queryTags, parameters.QueryResourceType);

            List<string> erroneousTags = new List<string>();

            var filterConditions = new Dictionary<DicomTag, QueryFilterCondition>();
            foreach (KeyValuePair<string, string> filter in parameters.Filters)
            {
                // filter conditions with attributeId as key
                if (!ParseFilterCondition(filter, queryTags, parameters.FuzzyMatching, out QueryFilterCondition condition))
                {
                    throw new QueryParseException(string.Format(DicomCoreResource.UnknownQueryParameter, filter.Key));
                }

                if (condition.QueryTag.IsExtendedQueryTag && condition.QueryTag.ExtendedQueryTagStoreEntry.ErrorCount > 0)
                {
                    erroneousTags.Add(filter.Key);
                }

                if (!filterConditions.TryAdd(condition.QueryTag.Tag, condition))
                {
                    throw new QueryParseException(string.Format(DicomCoreResource.DuplicateAttribute, filter.Key));
                }
            }

            // add UIDs as filter conditions
            if (parameters.StudyInstanceUid != null)
            {
                var condition = new StringSingleValueMatchCondition(new QueryTag(DicomTag.StudyInstanceUID), parameters.StudyInstanceUid);
                if (!filterConditions.TryAdd(DicomTag.StudyInstanceUID, condition))
                {
                    throw new QueryParseException(DicomCoreResource.DisallowedStudyInstanceUIDAttribute);
                }
            }

            if (parameters.SeriesInstanceUid != null)
            {
                var condition = new StringSingleValueMatchCondition(new QueryTag(DicomTag.SeriesInstanceUID), parameters.SeriesInstanceUid);
                if (!filterConditions.TryAdd(DicomTag.SeriesInstanceUID, condition))
                {
                    throw new QueryParseException(DicomCoreResource.DisallowedSeriesInstanceUIDAttribute);
                }
            }

            return new QueryExpression(
                parameters.QueryResourceType,
                ParseIncludeFields(parameters.IncludeField),
                parameters.FuzzyMatching,
                parameters.Limit,
                parameters.Offset,
                filterConditions.Values,
                erroneousTags);
        }