Код: Выделить всё
public class XYZ {
List? Containers { get; set; }
}
public class ABC {
string Name { get; set; }
List Childrens { get; set; } // Recursive structure
}
Код: Выделить всё
Containers (column name)
[
{
"Name": "Ch1"
}
]
Код: Выделить всё
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
Мобильная версия