0

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

public int? SomeField { get; set; }

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

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

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

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

4

4 回答 4

3

就个人而言,我更愿意过滤掉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)
于 2013-08-27T21:25:52.363 回答
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 )
于 2013-08-27T21:23:59.063 回答
1

是的; 只是比较null

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

于 2013-08-27T21:22:56.020 回答
1

你可以这样做:

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 )
于 2013-08-27T21:23:48.603 回答