gpt4 book ai didi

c# - Lambda 表达式和 || Entity Framework 中的运算符

转载 作者:太空狗 更新时间:2023-10-29 17:39:16 26 4
gpt4 key购买 nike

令我惊讶的是,这段代码有效:

string category = null;
Category Category = null;
int categoryId = 0;

var products = repository.Products
.Where(p => category == null || p.CategoryID == categoryId)
.ToList();

但下面的代码失败:

string category = null;
Category Category = null;
int categoryId = 0;

var products = repository.Products
.Where(p => category == null || p.CategoryID == Category.CategoryID)
.ToList();

我知道问题在于,即使我使用的是 ||运算符——它并不像我想象的那样有效。

在第二个示例中为什么要查看类别——即使类别值为空。不会短路吗?

最佳答案

您的“OR”正作为 SQL 发送到数据库。 Entity Framework 必须评估 类别,以便构建发送到数据库的正确 SQL。在您的第一个示例中,您没有给 Entity Framework 带来同样的问题。这不是短路问题,而是将您的表达式(包括 OR)翻译成正确查询的问题。

需要明确的是:如果您的查询发生在 Linq-to-Objects 的内存中(例如),您期望它可以短路并避免取消引用 null 的期望是正确的。但事实并非如此。整个表达式正在被翻译成 SQL,这意味着它需要评估 Category(您已将其初始化为 null)以获得 CategoryID,并且您的问题出现了。

关于c# - Lambda 表达式和 || Entity Framework 中的运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597166/

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