gpt4 book ai didi

c# - 为什么 EF Core 会生成反转位比较

转载 作者:行者123 更新时间:2023-12-03 18:52:21 24 4
gpt4 key购买 nike

我们正在尝试将我们的项目升级到 .net core 5。现在我们正在努力解决一个奇怪的 EF 行为。
一个简单的查询:

context.Set<Order>().Where(o => o.Archived == false)
其中 Order.Archived 在数据库中为 bit NOT NULL,生成这样的查询:
select * from Order where Archived <> CAST(1 as bit)
为什么会发生这种情况?我们希望有如下查询:
select * from Order where Archived = CAST(0 as bit)
这种反转可能会阻止数据库在更复杂的查询中使用正确的索引。
有没有办法让 EF 生成更直接的查询?
P.S.:我们也对可空字段尝试了相同的方法。在那里我们确实收到了预期的查询。

最佳答案

我调查了这一点,对于可为空的属性,它运行良好,正如预期的那样。
对于不可为空的属性,我发现了这个技巧,它给出了预期的结果

context.Set<Order>().Where(o => new []{false}.Contains(o.Archived))
在这种情况下,我们会收到以下 sql 查询:
select * from Order where Archived = CAST(0 as bit)

关于c# - 为什么 EF Core 会生成反转位比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66688479/

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