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


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

我有一个产品搜索表单,这个表单的结果是ProductFilter。在ProductFilter类中,有一个属性存储要搜索的产品的名称。生成一个动态查询的最佳方法是什么?只有当ProductFilter。名称不是空的,也不是空的?我的第一个想法是创建SqlExpression对象,并根据条件添加或不添加额外的Where条件,但SqlExpression不能实例化。

您可以使用泛型sql代码与参数和检查,查询参数是否为空,如

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

您可以像这样在OrmLite中链接SqlExpressions:

var exp = Db.From<ProductFilter>();
if (!productFilter.Name.IsNullOrEmpty())
    exp = exp.Where(pf => pf.Name.Contains(productFilter.Name));

这样,您就可以根据您选择的过滤器POCO中的任何标准动态构建查询。

最新更新