【发布时间】:2021-04-22 05:37:13
【问题描述】:
我通过ToJson() 在包含所有条件的对象上将一些查询条件存储在数据库中。一个简化的例子是:
{"FirstName" :[ {Operator: "=", Value: "John"}, { Operator: "in", Value:" ["Smith", "Jones"]"}], "SomeId": [Operator: "in", Value: "[1,2,3]" }]}
列表可以是字符串、整数、十进制或日期。这些都映射到同一个类/表,因此很容易通过反射获得FirstName 或SomeId 的类型。
我正在尝试根据这些信息创建一个 where 子句:
if (critKey.Operator == "in")
{
wb.Values.Add(keySave + i, (object)ConvertList<Members>(key,
(string)critKey.Value));
wb.WhereClause = wb.WhereClause + " And {0} {1} (@{2})".Fmt(critKey.Column,
critKey.Operator, keySave + i);
}
else
{
wb.Values.Add(keySave + i, (object)critKey.Value);
wb.WhereClause = wb.WhereClause + " And {0} {1} @{2}".Fmt(critKey.Column, critKey.Operator, keySave + i);
}
它会生成类似这样的东西(我的测试中的示例,是的,我知道 storenumber 部分很愚蠢):
Email = @Email0 And StoreNumber = @StoreNumber0 And StoreNumber in (@StoreNumber1)
我遇到了列表问题。有没有一种很好的方法可以使用任何 ormlite 工具而不是手动完成这一切? where 子句生成良好,除非在处理列表时。我正在尝试使其通用,但在这方面遇到了困难。
第二个问题可能相关,但我似乎无法找到如何使用 in 的参数。来自 NPoco,您可以执行 (colum in @0, somearray)`,但我似乎无法在不使用 Sql.In 的情况下找到如何执行此操作。
【问题讨论】:
标签: service ormlite-servicestack