【问题标题】:How to differentiate between SQL Null ints in c# linq如何区分 c# linq 中的 SQL Null int
【发布时间】:2013-08-27 21:21:58
【问题描述】:

在 MVC 中,我们可以在数据库上下文模型中声明可为空的整数为

public int? SomeField { get; set; }

但是如何在 Linq 中检查 SomeField 的记录是否为 Null。例如,如果我想获取值不为零的行列表,我使用以下 Linq 语句。

var k = db.TableSet.Where( u => u.Somefield != 0 )

是否有一个 Linq 等效于包含/排除 Zeros 和 Null 中的一个/两个?

编辑:我目前正在对此进行测试,但我确信它将是 Null 异常或 Null 字段返回为零。

【问题讨论】:

  • 您是在谈论 SQL 中的 null - DBNull - 还是在谈论 .NET null?
  • @KirkBroadhurst 我需要检查 DBNulls,然后将其相应地转换为我的类以防止出现 Null 异常。

标签: c# asp.net-mvc linq


【解决方案1】:

就我个人而言,我更愿意过滤掉我的数据层中的null 值,以防止这种null 签入代码。

但是,你可以使用:

var k = db.TableSet.Where(u => u.Somefield.HasValue && u.SomeField != 0)

//Or

var k = db.TableSet.Where(u => u.Somefield != null && u.SomeField != 0)

//Or

var k = db.TableSet.Where(u => u.Somefield.GetValueOrDefault() != 0)

//Or

var k = db.TableSet.Where(u => (u.Somefield ?? 0) != 0)

【讨论】:

    【解决方案2】:

    当然:

    var k = db.TableSet.Where( u => u.SomeField != null && u.Somefield != 0 )
    

    或者对于可以为空的类型:

    var k = db.TableSet.Where( u => u.SomeField.HasValue && u.Somefield != 0 )
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      var k = db.TableSet.Where( u => u.Somefield.HasValue && u.Somefield.Value != 0 )
      

      或者这个:

      var k = db.TableSet.Where( u => u.Somefield != null && u.Somefield != 0 )
      

      或者可能是这样的:

      var k = db.TableSet.Where( u => (u.Somefield ?? 0) != 0 )
      

      【讨论】:

      • LINQ 提供者可能会被第二个选项卡住。
      • 难以置信,几乎相同的答案!
      【解决方案4】:

      是的;只需与 null 比较即可。

      如果你想排除两者,你需要一个 and 子句。

      【讨论】:

      • 这个 Int 类型的问题在 C# 中不能为空
      • @Flood:您的模型应该与您的数据库模型非常匹配。如果列可能是null,则需要确保模型的对应属性也可以是null
      猜你喜欢
      • 1970-01-01
      • 2011-04-27
      • 2016-01-21
      • 1970-01-01
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多