我想这不是sqlite特有的,但这是我正在使用的。我有一个像文档存储一样正在使用的sqlite数据库。对于给定的强类型对象,我们将该对象直接转换为json并将其与一些元数据一起存储在数据库的一行中。 现在,我一直在研究mattwar的IQToolkit,并尝试使用它来映射到我的sqlite文档存储。
我想出了如何使用sqlite之类在json内部进行查询
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来,但是一旦我的查询引用嵌套得更深一些,它就会崩溃。周围会有MemberExpression吗? 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我的数据模型不是关系数据库,然后继续让我做一些愚蠢的事情,例如读取与表无关的嵌套对象。