Jay*_*Jay 2 c# linq linq-to-entities linq-to-sql
以下c#代码:
Func<Customer, bool> predicate1 = s => s.Name == "Roger";
dbContext.Customers.Where(predicate1);
Run Code Online (Sandbox Code Playgroud)
生成这个SQL查询:
select col1,col2 from customers
Run Code Online (Sandbox Code Playgroud)
注意在上面的sql查询中,没有where子句.
但是,在这个c#代码中:
dbContext.Customers.Where(s => s.Name == "Roger");
Run Code Online (Sandbox Code Playgroud)
它产生:
select col1,col2 from customers where name = 'Rogers'
Run Code Online (Sandbox Code Playgroud)
为什么有区别?有没有办法传递像上面这样的谓词,仍然生成带有where子句的SQL查询?
不同之处在于,在第一种情况下,您使用Enumerable.Where委托(Func<Customer, bool>)进行调用.LINQ提供程序本身根本没有看到 - Enumerable.Where只是迭代整个dbContext.Customers表,并在进程中应用谓词.
在第二种情况下你调用Queryable.Where与表达式树.LINQ提供程序可以将此"代码作为数据"进行分析并将其转换为SQL.
这将做你想要的:
Expression<Func<Customer, bool>> predicate1 = s => s.Name == "Roger";
dbContext.Customers.Where(predicate1);
Run Code Online (Sandbox Code Playgroud)