C# 关于表达式树的混淆

C# 关于表达式树的混淆,c#,.net,C#,.net,我已经读到表达式树用于构建动态查询。我的困惑是,同样的事情也可以通过简单的字符串来实现。例如,假设以下是从表中获取产品的示例查询: string productName = Console.Read(); var result = from products in context.Products where product.Name.Equals(productName) select product; 相反,即使我们使用普通ADO.Net

我已经读到表达式树用于构建动态查询。我的困惑是,同样的事情也可以通过简单的字符串来实现。例如,假设以下是从表中获取产品的示例查询:

string productName = Console.Read();
var result = from products in context.Products
             where product.Name.Equals(productName)
             select product;
相反,即使我们使用普通ADO.Net SQL provider,我们也可以按如下方式构建动态查询:

string productName = Console.Read();
string query= "Select * from tableName where productname=" + productName;
那么使用表达式树有什么好处呢? 类似地,在使用表达式树编写动态代码时,我们不能简单地将整个代码存储为字符串,并编写自定义解析逻辑以在运行时对其进行评估吗


事实上,这个问题并不特定于表达式树,而是一般的树。

此语法可以跨CLR对象和关系数据库堆栈进行操作。这是一种众所周知的查询语法,在运行时被转换为数据库的正确查询字符串。你得到的好处是,你可以换掉你的数据库技术,理论上它只是继续工作。如评论中所述,您还可以在编译时而不是运行时了解错误。

string query=“Select…where productname=“+productname不是一个好的。很容易发生SQL注入。假设我们使用了适当的筛选器来阻止SQL注入您是否希望在编译时或执行时了解有关键入错误和其他问题?字符串的“编写自定义解析逻辑”比使用表达式树操作更难。最后但并非最不重要的一点:自动完成/intellisense