INS子句的ServiceStack或MLite反序列化数组
我通过包含所有条件的对象上的INS子句的ServiceStack或MLite反序列化数组,service,
ormlite-servicestack,Service,
ormlite Servicestack,我通过包含所有条件的对象上的ToJson()将一些查询条件存储在数据库中。一个简化的例子是: {"FirstName" :[ {Operator: "=", Value: "John"}, { Operator: "in", Value:" ["Smith", "Jones"]"}], "SomeId": [Operator: "in", Value: "[1,2,3]" }]} 列表可以是string、int、decimal或date。这些都映射到同一个类/表,因此通过反射很容易获得F
ToJson()
将一些查询条件存储在数据库中。一个简化的例子是:
{"FirstName" :[ {Operator: "=", Value: "John"}, { Operator: "in", Value:" ["Smith", "Jones"]"}], "SomeId": [Operator: "in", Value: "[1,2,3]" }]}
列表可以是string、int、decimal或date。这些都映射到同一个类/表,因此通过反射很容易获得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);
}
我在名单上遇到了问题。有没有一种很好的方法可以用ormlite工具来代替手工操作?where子句生成罚款,但处理列表时除外。我试图使它通用,但有一个困难的一部分
第二个问题可能与此相关,但我似乎找不到如何在中使用参数。来自NPoco的您可以执行
(columin@0
,somearray)`但我不能'似乎不使用Sql就知道如何执行此操作。在处理列表时,您可以使用以下示例
var storeNumbers = new [] { "store1", "store2", "store3" };
var ev = Db.From<MyClass>
.Where(p => storeNumbers.Contains(p => p.StoreNumber));
var result = Db.Select(ev);
var storeNumbers=new[]{“store1”、“store2”、“store3”};
var ev=分贝自
其中(p=>StoreNumber.Contains(p=>p.StoreNumber));
var结果=Db.选择(ev);
我最终不得不编写自己的解析器,因为ormlite似乎不支持对Npco之类列表的查询参数的相同支持。基本上,我希望能够做到这一点:
Where(“SomeId in@Ids”)
并传入一个参数,但以以下代码结束:
listObject = ConvertListObject<Members>(key, (string)critKey.Value);
wb.WhereClause = wb.WhereClause + " And {0} {1} ({2})"
.Fmt(critKey.Column, critKey.Operator,listObject.EscapedList(ColumnType<Members>(key)));
public static string EscapedList(this List<object> val, Type t)
{
var escapedList = "";
if (t == typeof(int) || t == typeof(float) || t == typeof(decimal))
{
escapedList = String.Join(",", val.Select(x=>x.ToString()));
} else
{
escapedList = String.Join(",", val.Select(x=>"'" + x.ToString() + "'"));
}
return escapedList;
}
listObject=ConvertListObject(key,(string)critKey.Value);
wb.WhereClause=wb.WhereClause+“和{0}{1}({2})”
.Fmt(critKey.Column、critKey.Operator、listObject.EscapedList(ColumnType(key)));
公共静态字符串EscapedList(此列表值,类型t)
{
var escapedList=“”;
如果(t==typeof(int)| | t==typeof(float)| | t==typeof(decimal))
{
escapedList=String.Join(“,”,val.Select(x=>x.ToString());
}否则
{
escapedList=String.Join(“,”,val.Select(x=>“'”+x.ToString()+”);
}
返回转义列表;
}
我希望看到其他答案,特别是如果我在ormlite中遗漏了一些东西。我不能在我的案例中使用类型化api
listObject = ConvertListObject<Members>(key, (string)critKey.Value);
wb.WhereClause = wb.WhereClause + " And {0} {1} ({2})"
.Fmt(critKey.Column, critKey.Operator,listObject.EscapedList(ColumnType<Members>(key)));
public static string EscapedList(this List<object> val, Type t)
{
var escapedList = "";
if (t == typeof(int) || t == typeof(float) || t == typeof(decimal))
{
escapedList = String.Join(",", val.Select(x=>x.ToString()));
} else
{
escapedList = String.Join(",", val.Select(x=>"'" + x.ToString() + "'"));
}
return escapedList;
}