在ServiceStack OrmLite中实现动态,复杂过滤器查询的最佳方法是什么?

时间:2014-08-18 12:59:40

标签: servicestack ormlite-servicestack

class ProductFilter{
    public string Name { get; set; }
    .
    .
    .
}

我有一个产品搜索表单,此表单的结果是ProductFilter。在ProductFilter类中,有一个属性存储要搜索的产品的名称。生成动态查询的最佳方法是什么,只有当ProductFilter.Name不为null且不为空时才在产品名称上添加条件?我的第一个想法是创建SqlExpression对象并基于条件添加或不添加其他条件,但SqlExpression无法实例化。

2 个答案:

答案 0 :(得分:1)

您可以使用带有params的通用sql代码并检查,查询参数是否为null,如

select * from MyTable where (Name = @name or @name is null)

答案 1 :(得分:1)

您可以在OrmLite中链接SqlExpressions,如下所示:

var exp = Db.From<ProductFilter>();

if (!productFilter.Name.IsNullOrEmpty())
    exp = exp.Where(pf => pf.Name.Contains(productFilter.Name));

通过这种方式,您可以根据您选择的过滤器POCO中的任何条件动态构建查询。