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

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

Сообщение 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, поскольку мы обычно возвращаем Task и не ожидаем вызова базы данных внутри функции.
И во-вторых: таким образом мы не сможем отличить несуществующие строки от ситуации, когда у нас может быть несколько строк (при использовании разных предложенийwhere).

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

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

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

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

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

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