Возврат типа 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

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