gpt4 book ai didi

c# - 生成的 SQL 的差异

转载 作者:行者123 更新时间:2023-11-30 20:00:20 25 4
gpt4 key购买 nike

以下 C# 代码:

Func<Customer, bool> predicate1 = s => s.Name == "Roger";
dbContext.Customers.Where(predicate1);

生成此 sql 查询:

select col1,col2 from customers 

请注意,在上面的 sql 查询中,没有 where 子句。

但是,在这个 C# 代码中:

dbContext.Customers.Where(s => s.Name == "Roger");   

它产生:

select col1,col2 from customers where name = 'Rogers'

为什么不同?有没有一种方法可以像上面那样传递谓词并仍然生成带有 where 子句的 sql 查询?

最佳答案

不同之处在于,在第一种情况下,您调用的是 Enumerable.Where 与代表( Func<Customer, bool> )。 LINQ 提供程序本身根本看不到这一点 - Enumerable.Where只会遍历整个 dbContext.Customers表,并在进程中应用谓词。

在第二种情况下,您正在调用 Queryable.Whereexpression tree . LINQ 提供程序可以分析此“作为数据的代码”并将其转换为 SQL。

这会做你想做的:

Expression<Func<Customer, bool>> predicate1 = s => s.Name == "Roger";
dbContext.Customers.Where(predicate1);

关于c# - 生成的 SQL 的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21311262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com