ServiceStack OrmLite的PredicateBuilder问题

时间:2016-04-25 05:56:18

标签: servicestack ormlite-servicestack

我使用ServiceStack OrmLite PredicateBuilder动态构建WHERE语句:

   var q = PredicateBuilder.True<ItemList>();

   if (!filter.Keyword.IsNullOrWhiteSpace())
   {
         q = q.And(i => i.Brand.Contains(filter.Keyword) ||      i.ItemDescription.Contains(filter.Keyword) || i.Serial.Contains(filter.Keyword));
   }

   if (!filter.ItemStatus.IsNullOrWhiteSpace())
   {
         q=q.And(i => i.ItemStatus == filter.ItemStatus);
   }

   var count = await Db.CountAsync(Db.From<ItemList>().Where(q));

如果没有满足if语句条件,则在执行查询时出错:

  

在上下文中指定的非布尔类型的表达式   条件是预期的,接近&#39; ORDER&#39;

原因是生成的查询是:

  

从ItemList WHERE True

中选择[字段列表]

更新:我正在使用SQL Server 2012方言提供程序。

这显然无效,这是预期的行为吗?

我可以使用布尔值来检查是否满足任何条件,然后应用谓词表达式,但这很麻烦。

我期待如果只使用谓词而没有任何添加的子句我会得到:

  

WHERE True = True

或等同的东西。

这是使用PredicateBuilder的正确方法吗?

0 个答案:

没有答案