ormlite-servicestack,Service,ormlite Servicestack" /> ormlite-servicestack,Service,ormlite Servicestack" />

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;

  }