Проверка на нулевое значение в c # var с каркасом LINQ & Entity - PullRequest
2 голосов
/ 08 марта 2011

Я довольно новичок в фреймворке LINQ & Entity, а также в ключевом слове var в c #, поэтому извините, если это звучит как вопрос для новичка.

У меня проблемы с проверкой на нулевые значения после выполнения чего-то вроде этого:

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

Даже если электронная почта не существует в базе данных, запись не равна нулю.

Так что вместо if (entry == null) мне пришлось сделать if (entry.Count() < 1), чтобы проверить существующую запись, прежде чем я выполню свой следующий пакет операторов. Есть ли причина, по которой переменная не будет считаться нулевой?

Ответы [ 3 ]

8 голосов
/ 08 марта 2011

В вашем примере 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) {
    // ...
}

Это ближе к тому, что вы себе представляли, но выброситисключение, если существует более одной подходящей записи.

0 голосов
/ 24 февраля 2012

В VB

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

Если запись не является Nothing

'у нас есть значение

else

' у нас нет значения

End If

0 голосов
/ 08 марта 2011

Ключевые слова "var" позволяют получить любой тип на основе присваивания во время выполнения, поэтому, когда вы делаете запрос, используя "Где", запись var становится "IEnumerable", который возвращается Where, поэтому вы должны проверить счетчик .

...