EF Core 5 可翻译为SQL的操作查询及常用Where写法有效性咨询
EF Core 5 指定LINQ操作的SQL转译支持情况
你提到的3种LINQ写法均属于EF Core 5原生支持SQL转译的范畴,不会触发客户端求值:
Where(entity => listOfInts.Contains(entity.Id)):会自动转译为SQL的IN条件语句,EF Core会自动处理列表为空等边界场景,避免生成非法SQL。Where(entity => entity.SomeStringProp.Contains("SomeSubsString")):会适配当前使用的数据库生成对应的字符串匹配语法,例如SQL Server下会生成LIKE '%SomeSubsString%'的查询条件。Where(entity => entity.SomeNullableProp.HasValue):会直接转译为SQL的IS NOT NULL判断,完全在数据库侧执行。
如果要排查其他操作是否会触发客户端求值,你可以启用EF Core的日志输出功能,未显式配置客户端求值允许的情况下,EF Core 5遇到无法转译的操作会直接抛出异常,不会静默在客户端执行,你可以借此快速定位问题代码。
内容的提问来源于stack exchange,提问作者Caleb Bertrand
相关产品推荐
相关产品推荐

