【问题标题】:How to check if the value exist in the database table ignoring null in LINQ C# [duplicate]如何检查值是否存在于数据库表中,忽略 LINQ C# 中的 null [重复]
【发布时间】:2020-02-27 09:43:26
【问题描述】:

当查询使用 LINQ 和 Lambda 表达式在 C# 中检查数据库表中存在的值时,我想忽略 null。

下面的行也在检查 null 。当它找到 null 时忽略它。

var nmcExist = db.AspNetUsers.Any(a => a.NMC_Number== model.NMC_Number);

【问题讨论】:

  • .Any(a => a.NMC_Number != null && a.NMC_Number == model.NMC_Number);?
  • is checking null as well 是什么意思?您实际使用的是哪个 ORM? LINQ 只是 ORM 将映射到查询的一种查询语言。不同的 ORM,甚至不同的 EF 版本都可能产生不同的 SQL 查询。在这种情况下,检查nullONLY 方法是发出a.NMC_Number is @p1 or a.NMC_NUMBER IS Null。 EF 默认情况下不会这样做,但这种行为可以改变
  • 所以, 6.2之前,默认行为是发出IS NULL,由UseCSharpNullComparisonBehavior控制,即false由默认。这个changed in 6.2 和新的默认确实 生成IS NULL。 EF Core 还没有这个选项。那么哪个你使用的是哪个ORM,哪个版本?
  • EF Core 选项是UseRelationalNulls

标签: c# linq orm


【解决方案1】:

您可能正在寻找 2 个选项:

  • 如果null,返回true
.Any(a => a.NMC_Number == null || a.NMC_Number == model.NMC_Number);
  • 如果is not null,返回true,然后检查第二个条件。
.Any(a => a.NMC_Number != null && a.NMC_Number == model.NMC_Number);

更新

正如@Panagiotis Kanavos 的评论:这真的取决于:

  • 您实际使用的是哪个 ORM?
  • 哪个版本?

这仅仅是因为,不同的 ORM,甚至不同的 EF 版本都可能产生不同的 SQL 查询。此外,在 EF v6.2 之前,默认行为是不发出 IS NULL。

【讨论】:

  • 我认为他要求 null 被忽略
  • 我已经用 2 个选项更新了我的答案。请看一看。非常感谢。
  • 可能不需要这个。在 EF 6.2 中,只需将UseDatabaseNullSemantics 设置为true。在 EF Core 3.1 中,它是 UseRelationalNulls
  • 是的,先生。我刚刚根据您的建议更新了我的答案。非常感谢@Panagiotis Kanavos
猜你喜欢
  • 1970-01-01
  • 2021-10-10
  • 2013-05-11
  • 1970-01-01
  • 2017-11-24
  • 2011-12-22
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
相关资源
最近更新 更多