动态过滤.Net对象的最佳方法

时间:2011-01-09 10:35:59

标签: c# dynamic filtering

我目前正在工作的项目有一种方法来定义数据库中对象的过滤器 此过滤器是一个非常简单的类,包含将组合以生成SQL where子句的条件。

现在的目标是使用此类来过滤.Net对象。因此,例如,过滤器可能指定应用它的对象的title属性必须包含一些用户定义的字符串。

有什么方法可以解决这个问题?过滤器应返回什么而不是sql where-clause以及如何将其应用于对象?我已经考虑了好几个小时了,还没有一点点想法如何解决这个问题。一直在考虑反思,动态代码执行,构建表达式,但仍未找到起点。

2 个答案:

答案 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来实现类似的效果。