Возврат типа C# EFCore с нулевым значением по сравнению с не найденной или множественной записью базы данныхC#

Место общения программистов C#
Ответить
Anonymous
 Возврат типа C# EFCore с нулевым значением по сравнению с не найденной или множественной записью базы данных

Сообщение Anonymous »

У меня есть следующий вариант использования.
База данных содержит запись с полем, допускающим значение NULL, и я хотел бы запросить из базы данных только это значение для одной записи.
Это можно легко сделать с помощью этого Linq-запроса:

Код: Выделить всё

var value = await context.Table
.Where(r => r.Id == recordId)
.Select(r => r.Field)
.SingleOrDefaultAsync();
Это вернет значение поля или «ноль», если запись не существует.

Поэтому, когда поле имеет значение, мы получаем это значение. Но когда поле имеет значение «null», вы также получаете «null».
И здесь начинается моя проблема.

Я хочу различать ситуации, когда значение поля равно «null», и когда запись не существует (ошибка).
Вы можете попробовать это

Код: Выделить всё

try {
var value = await context.Table
.Where(r => r.Id == recordId)
.Select(r => r.Field)
.SingleAsync();
}
catch
{
throw new NotFoundException("");
}
Но, во-первых, я бы предпочел не полагаться на перехват исключения с помощью try/catch, поскольку мы обычно возвращаем te 'Task' и не ожидаем вызова базы данных внутри функции.
И во-вторых: таким образом мы не можем отличить несуществующие записи от ситуации, когда у нас может быть несколько записей (при использовании разных предложенийwhere).>

Подробнее здесь: https://stackoverflow.com/questions/798 ... ase-record
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»