gpt4 book ai didi

c# - LINQ 在 SQL 语句中生成额外的 IS NULL 条件

转载 作者:可可西里 更新时间:2023-11-01 07:44:01 25 4
gpt4 key购买 nike

我正在编写一些 LINQ 来根据电子邮件获取记录,但是,生成的 SQL 包含一个额外的 IS NULL 条件,它不需要存在,因为我正在检查参数值在将条件添加到查询之前在代码中为 null。

我的 LINQ 代码是:

if (email != null)
{
query = query.Where(r => r.Email == email);
}

由此产生的SQL条件为:

(([Extent1].[Email] = @p__linq__0) OR (([Extent1].[Email] IS NULL) AND (@p__linq__0 IS NULL)))

(([Extent1].[Email] IS NULL) AND (@p__linq__0 IS NULL))

就我所见而言,不需要在那里。

有没有办法让 LINQ 忽略它?

最佳答案

他们在那里以防 email 为空。

您可以通过设置 UseDatabaseNullSemantics 来防止这种情况发生为 true

Gets or sets a value indicating whether database null semantics are exhibited when comparing two operands, both of which are potentially nullable. The default value is false. For example (operand1 == operand2) will be translated as: (operand1 = operand2) if UseDatabaseNullSemantics is true, respectively (((operand1 = operand2) AND (NOT (operand1 IS NULL OR operand2 IS NULL))) OR ((operand1 IS NULL) AND (operand2 IS NULL))) if UseDatabaseNullSemantics is false.

有多种方法可以应用它。

如果您只想将此应用于单个查询,您可以这样做:

using(TheContext dbContext = new TheContext()) {
dbContext.Configuration.UseDatabaseNullSemantics = true;

...

if (email != null)
{
query = query.Where(r => r.Email == email);
}
}

如果您想将其应用于所有查询:

public class TheContext : DbContext
{
public TheContext()
{
this.Configuration.UseDatabaseNullSemantics = true;
}
}

您还可以将属性更改为[Required]:

public class Model {
[Required]
public string Email { get; set; }
}

关于c# - LINQ 在 SQL 语句中生成额外的 IS NULL 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50444806/

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