private void AppendExtendedQueryTagTables()

in src/Microsoft.Health.Dicom.SqlServer/Features/Query/SqlQueryGenerator.cs [159:230]


        private void AppendExtendedQueryTagTables()
        {
            foreach (QueryFilterCondition condition in _queryExpression.FilterConditions.Where(x => x.QueryTag.IsExtendedQueryTag))
            {
                QueryTag queryTag = condition.QueryTag;
                int tagKey = queryTag.ExtendedQueryTagStoreEntry.Key;
                ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[queryTag.VR.Code];
                string extendedQueryTagTableAlias = null;
                _stringBuilder.Append("INNER JOIN ");
                switch (dataType)
                {
                    case ExtendedQueryTagDataType.StringData:
                        extendedQueryTagTableAlias = ExtendedQueryTagStringTableAlias + tagKey;
                        _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagString.TableName} {extendedQueryTagTableAlias}");

                        break;
                    case ExtendedQueryTagDataType.LongData:
                        extendedQueryTagTableAlias = ExtendedQueryTagLongTableAlias + tagKey;
                        _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagLong.TableName} {extendedQueryTagTableAlias}");

                        break;
                    case ExtendedQueryTagDataType.DoubleData:
                        extendedQueryTagTableAlias = ExtendedQueryTagDoubleTableAlias + tagKey;
                        _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDouble.TableName} {extendedQueryTagTableAlias}");

                        break;
                    case ExtendedQueryTagDataType.DateTimeData:
                        extendedQueryTagTableAlias = ExtendedQueryTagDateTimeTableAlias + tagKey;
                        _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagDateTime.TableName} {extendedQueryTagTableAlias}");

                        break;
                    case ExtendedQueryTagDataType.PersonNameData:
                        extendedQueryTagTableAlias = ExtendedQueryTagPersonNameTableAlias + tagKey;
                        _stringBuilder.AppendLine($"{VLatest.ExtendedQueryTagPersonName.TableName} {extendedQueryTagTableAlias}");

                        break;
                }

                _stringBuilder
                    .Append("ON ")
                    .Append($"{extendedQueryTagTableAlias}.PartitionKey")
                    .Append(" = ")
                    .AppendLine(VLatest.Study.PartitionKey, StudyTableAlias);

                _stringBuilder
                    .Append("AND ")
                    .Append($"{extendedQueryTagTableAlias}.StudyKey")
                    .Append(" = ")
                    .AppendLine(VLatest.Study.StudyKey, StudyTableAlias);

                using (IndentedStringBuilder.DelimitedScope delimited = _stringBuilder.BeginDelimitedOnClause())
                {
                    if ((_queryExpression.IsSeriesIELevel() || _queryExpression.IsInstanceIELevel()) && queryTag.Level < QueryTagLevel.Study)
                    {
                        _stringBuilder
                            .Append("AND ")
                            .Append($"{extendedQueryTagTableAlias}.SeriesKey")
                            .Append(" = ")
                            .AppendLine(VLatest.Series.SeriesKey, SeriesTableAlias);
                    }

                    if (_queryExpression.IsInstanceIELevel() && queryTag.Level < QueryTagLevel.Series)
                    {
                        _stringBuilder
                            .Append("AND ")
                            .Append($"{extendedQueryTagTableAlias}.InstanceKey")
                            .Append(" = ")
                            .AppendLine(VLatest.Instance.InstanceKey, InstanceTableAlias);
                    }
                }
            }
        }