我已经读过表达式树用于构建动态查询。我的困惑是同样的事情也可以通过简单的字符串来实现。例如,假设这是一个从表中获取产品的示例查询:
string productName = Console.Read();
var result = from products in context.Products
where product.Name.Equals(productName)
select product;
相反,即使我们使用普通的ADO.Net SQL提供程序,我们也可以按如下方式构建动态查询:
string productName = Console.Read();
string query= "Select * from tableName where productname=" + productName;
那么使用表达式树有什么好处? 类似地,在使用表达式树编写动态代码时,我们不能简单地将整个代码存储为字符串并编写自定义解析逻辑以在运行时对其进行评估吗?
事实上,这个问题并不是特定于表达树,而是一般的树。
答案 0 :(得分:2)
此语法可以跨CLR对象和关系数据库堆栈运行。这是一种众所周知的查询语法,在运行时将其转换为数据库的正确查询字符串。您获得的优势是您可以更换数据库技术,理论上它只是继续工作。如评论中所述,您还会在编译时告知错误,而不是运行时间。