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

标签 c# dynamic filtering

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

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

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

最佳答案

这取决于所有用例是什么:)

如果您的数据库代码可以使用 LINQ,那么我可能会考虑返回 Expression<Func<YourEntity,bool>> ,因为这可以通过 .Where 应用基于数据库的 LINQ 和 LINQ-to-Objects - 在后一种情况下只需调用:

var filtered = original.AsQueryable().Where(filter);

(数据库代码通常已经可查询,因此不需要 AsQueryable)。

这样做的一个坏处是不能保证特定的查询表达式适用于每个 LINQ 提供程序。

或者,您必须编写自己的基本查询语言或基本树结构。然后编写代码来转换为属性反射和 SQL。工作量很大。

最后一个想法是只有两个不同的查询结果,并将这两个结果分开。所以一条 SQL,一条 Predicate<T>或类似的。不过,它们存在不同步的风险。

关于c# - 动态过滤 .Net 对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638709/

相关文章:

mysql - 动态数据库列?

python - 如何使用 Python 根据可变条件集过滤列表列表?

python - 使用 OpenCV 的 Python 中的最小过滤器

python - 屏蔽数组的中值滤波器

c# - 打开第二个表格,右下一个第一个表格

c# - 单元测试中的进度指示

c# - 正则表达式来验证逗号分隔的电子邮件地址?

c - C 中的 fscanf 动态数组?

objective-c - "virtual"Objective-C中方法的返回类型

c# - 根据代码隐藏状态选择不同的 jquery-ui 选项卡