如何使用IQToolkit通过sqlite在json内部进行查询

时间:2019-03-06 03:25:39

标签: c# linq sqlite expression-trees sqlite-json1

我想这不是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我的数据模型不是关系数据库,然后继续让我做一些愚蠢的事情,例如读取与表无关的嵌套对象。

0 个答案:

没有答案