使用Linq表达式树设计灵活高级搜索的模式或技术

时间:2009-01-23 18:51:57

标签: linq-to-sql entity-framework linq-to-entities lambda expression-trees

我希望为我的ASP.NET / SQL Server 2005应用程序添加“高级搜索”功能。理想情况下,我希望它是由表驱动的。例如,如果我的架构通过向我要搜索的表添加新列而更改,我想让UI反映添加新列作为可搜索字段。我可以设想一些控制表,其中包含可搜索的字段,它们的类型,相关的查找等。

构建UI时可以参考这些表。我的问题在于创建动态SQL的最佳方法。一种方法是自己构造参数化的SQL语句。但是我对Linq很感兴趣,不知何故,我认为System.Linq.Dynamic命名空间 - 以及 Linq Expression Trees - 可能会提供更优雅/更强大的解决方案吗?

希望任何此类解决方案都适用于Linq to Sql或Linq to Entities。我是否正确调查此路径,或者这个问题空间不是表达树的用例之一吗?

1 个答案:

答案 0 :(得分:1)

您可以使用表达式树,通过构建一个树来比较模式中的所有字段,然后将该表达式传递给Linq2Sql以返回所需的sql。但为什么要这么麻烦?这是更多的编程工作,代码将更难理解,除了理论上交换数据提供者的能力之外没有任何好处。

(嘿霍华德) - 确实 - 在这种情况下使用字符串比使用表达式树要简单得多。另一方面,如果您要向用户提供一种小型查询语言,那么表达式树就会派上用场。