Полагаю, это не характерно для sqlite, однако это то, что я использую.У меня есть база данных sqlite, которая используется как хранилище документов.Для данного строго типизированного объекта мы конвертируем этот объект непосредственно в json и сохраняем его в строке в базе данных вместе с некоторыми метаданными.Теперь я изучаю IQToolkit от mattwar и пытаюсь использовать его для отображения в моем хранилище документов sqlite.
Я выяснил, как выполнять запросы внутри json с помощью sqlite, например
SELECT t0.json_column
FROM table_name as t0
WHERE JSON_EXTRACT(t0.json_column, '$.Field') > 1000
и как идти глубже в объект, который я знаю, имеет массив объектов, таких как
SELECT t0.json_column
FROM table_name as t0, json_each(t0.json_column, '$.NestedObject.ArrayObject') as t1
WHERE JSON_EXTRACT(t1.value, '$.FieldInArray') == "AValue"
Однако, используя IQToolkit, я не могу понять, как отобразить запросы, такие как
Query<MyObj>().Where(o => o.NestedObject.ArrayObject.Any(a=>a.FieldInArray == "AValue")
У меня естьдобился умеренного успеха с такими запросами, как
Query<MyObj>().Where(o => o.Field > 1000)
, просто переопределив VisitColumn, но как только у меня есть ссылка на запрос, что-то вложенное немного глубже, оно разваливается.Будет ли членство вокруг?ColumnExpression, если я запрашиваю как
Query<MyObj>().Where(o => o.AnotherField.NestedValue > 1000)
Или если я запрашиваю как
Query<MyObj>().Where(o => o.NestedObject.ArrayObject[0].FieldInArray == "AValue")
, я получаю метод MethodCall (вызов get_Item aka []), MemberExpression и, наконец, ColumnExpression,Я думаю Я хочу иметь по окончании просто выражение для столбца, в котором столбец может содержать комбинацию этих полей, возможно.
TL; DR;Я не могу понять, как правильно сказать IQToolkit, что моя модель данных не является реляционной базой данных, и поэтому я позволю себе делать глупые вещи, такие как чтение вложенных объектов, которые не являются связанными таблицами.