我目前正在工作的项目有一种方法来定义数据库中对象的过滤器
此过滤器是一个非常简单的类,包含将组合以生成SQL where
子句的条件。
现在的目标是使用此类来过滤.Net对象。因此,例如,过滤器可能指定应用它的对象的title属性必须包含一些用户定义的字符串。
有什么方法可以解决这个问题?过滤器应返回什么而不是sql where-clause以及如何将其应用于对象?我已经考虑了好几个小时了,还没有一点点想法如何解决这个问题。一直在考虑反思,动态代码执行,构建表达式,但仍未找到起点。
答案 0 :(得分:3)
这取决于所有用例是什么:)
如果您的数据库代码可以使用LINQ,那么我可能会考虑返回Expression<Func<YourEntity,bool>>
,因为这可以通过.Where
应用于基于DB的LINQ和LINQ到对象 - 后者只需致电:
var filtered = original.AsQueryable().Where(filter);
(数据库代码通常已经可查询,因此不需要AsQueryable。)
关于这一点的一个坏处是,无法保证特定的查询表达式可以在每个LINQ提供程序上运行。
或者,您必须编写自己的基本查询语言或基本树结构。然后编写代码转换为属性反射和SQL。很多工作。
最后一个想法是只有两个不同的查询结果,并保持两个分开。所以一个SQL,一个Predicate<T>
或类似的。但是,它们存在不同步的风险。
答案 1 :(得分:2)
如果你想这样做有点像动态创建的SQL where子句,你可以使用Dynamic LINQ来实现类似的效果。