联合ServiceStack ORM lite 4.5.4中的所有支持

时间:2017-01-11 19:57:32

标签: servicestack ormlite-servicestack

在我的应用程序中,用户可以为特定类型定义多个过滤器。我想以某种方式将这些查询组合在一起。

SqlExpression<Notice> query1 = Db.From<Notice>(s=>s.param1 == 2);
// ...queries are more complicated but result type is same
SqlExpression<Notice> query2 = Db.From<Notice>(s=>s.param1 == 3 && s.param2 == 3);

SqlExpression<Notice> unionAll = query1.UnionAll(query2);
var result = Db.Select(unionAll);

知道如何在Orm Lite(4.5.4)中实现这一点吗?

2 个答案:

答案 0 :(得分:1)

我不确定向ServiceStack添加UnionAll方法会给你带来太大的影响,因为无论如何这两个查询都会被单独调用。我想你可以创建一个易于使用的扩展方法。

无论如何,您可以单独调用每个,然后使用AddRange方法将第二个结果附加到第一个。

var results = Db.Select(query1); var results2 = Db.Select(query2); results.AddRange(results2);

替代AddRange,如果需要排除重复项,可以使用Union方法。如果您想创建新列表而不是改变query1的结果,可以使用Concat方法。这两个选项是IEnumerable上的System.Linq扩展方法。

答案 1 :(得分:-1)

虽然没有官方API允许您这样做,但您应该能够使用以下内容构建它:

var sql = query1.ToSelectStatement()
          + " UNION ALL " +
          query2.ToSelectStatement();

var results = db.SqlList<Notice>(sql);