2

我对 LINQ 和实体框架以及 c# 中的 var 关键字很陌生,所以如果这听起来像一个“新手”问题,请原谅我。

执行以下操作后,我在检查空值时遇到问题:

var entry = myDB.Entries.Where(e => e.Email == entry.Email);

即使电子邮件在数据库中不存在,条目也不等于 null。

因此,if (entry == null)我不必if (entry.Count() < 1)在执行下一批语句之前检查现有条目。有什么理由不认为该变量为空?

4

3 回答 3

7

在您的示例中,entry永远不会null. 你认为的null实际上是一个IEnumerable<Entry>没有项目的东西。

如果您想检查是否至少有一个符合您的条件的条目,您通常会执行以下操作:

var entries = myDB.Entries.Where(e => e.Email == entry.Email);
if (entries.Any()) {
    // ...
}

如果您知道最多只有一个条目,那么您还可以执行以下操作:

var entry = myDB.Entries.Where(e => e.Email == entry.Email).SingleOrDefault();
if (entry != null) {
    // ...
}

这更接近您的想象,但如果有多个匹配条目,则会引发异常。

于 2011-03-08T09:57:26.970 回答
0

“var”关键字可以在运行时根据分配实现任何类型,因此当您使用“Where”查询时,var 条目变为由 Where 返回的“IEnumerable”,这就是您必须检查计数的原因。

于 2011-03-08T09:57:39.213 回答
0

在 VB 中

Dim entry = myDB.Entries.Where(Function(e) e.Email = entry.Email).SingleOrDefault()

If entry IsNot Nothing Then

' 我们有一个价值

别的

' 我们没有价值

万一

于 2012-02-24T15:41:07.870 回答