Как выполнить чувствительный к случаю поиск JSONB с EF Core и PostgreSQL?C#

Место общения программистов C#
Ответить
Anonymous
 Как выполнить чувствительный к случаю поиск JSONB с EF Core и PostgreSQL?

Сообщение Anonymous »

Я работаю с приложением EF Core, в котором у меня есть такая структура таблицы:

Код: Выделить всё

public class XYZ {
List? Containers { get; set; }
}

public class ABC {
string Name { get; set; }
List Childrens { get; set; } // Recursive structure
}

В Postgresql в столбце контейнеров типа JSONB , и он хранит данные, подобные этим:

Код: Выделить всё

Containers (column name)
[
{
"Name": "Ch1"
}
]
Я хочу выполнить нечувствительный к случаю поиска имени в поле «Контейнеры jsonb». Например, если я ищу с «CH1», он работает нормально, но если я ищу с CH1 (нижний регистр), он не возвращает никаких результатов. Используя следующий код EF Core для запроса данных: < /p>

Код: Выделить всё

var chapterNames = new[] { "Ch1" };
var jsonContainers = chapterNames.Select(containerName => $"[{{ \"Name\": \"{containerName}\" }}]").ToList();
var predicate = query.Where(x => x.Containers != null && jsonContainers
.Any(container => EF.Functions.JsonContains(x.Containers, container)));

Проблема:
Проблема, с которой я сталкиваюсь, заключается в том, что функция ef.functions.jsonContains чувствителен к случаям, и мне нужно выполнить нечувствительный к случаю поиска имени в столбце jsonb .
Я не могу использовать tolist ()
  • Поиск имени < /code> без чувствительности к случаю с использованием более низкого < /code> или аналогичных функций, но это невозможно с Ef.functions.jsonContains < /code>.
  • Использование функций jsonb для нечувствительного поиска, но EF Core не поддерживает их напрямую для JSONB Columns.
    Я попытался создать индексы < /code> и запустить выше запроса, но он также не сработал для меня:

    Код: Выделить всё

    CREATE INDEX IF NOT EXISTS idx_abc_name_lower ON XYZ USING gin (lower(Containers->>'Name') gin_trgm_ops);
Решение, которое я ищу:
Я хочу Чтобы узнать, есть ли способ сделать этот вопрос нечувствительным без значительного влияния на производительность.

Подробнее здесь: https://stackoverflow.com/questions/793 ... postgresql
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»