表达式树表示树状数据结构中的代码,其中每个节点都是一个表达式,例如,方法调用或二进制操作,如x < y
。
您可以编译和运行由表达式树表示的代码。这使得可执行代码的动态修改,在各种数据库中执行LINQ查询以及创建动态查询成为可能。
在LINQ中,表达式树被用来表示针对实现IQueryable <T>的数据源的结构化查询。例如,LINQ提供程序实现用于查询关系数据存储的IQueryable <T>接口。C#编译器将定位此类数据源的查询编译为在运行时构建表达式树的代码。然后,查询提供者可以遍历表达式树数据结构并将其转换为适合数据源的查询语言。
LINQ中还使用表达式树来表示分配给Expression <TDelegate>类型的变量的lambda表达式。
本主题描述如何使用表达式树来创建动态的LINQ查询。动态查询在编译时不知道查询的具体情况时非常有用。例如,应用程序可能会提供一个用户界面,使最终用户能够指定一个或多个谓词来过滤数据。为了使用LINQ进行查询,这种应用程序必须使用表达式树来在运行时创建LINQ查询。