Как получить First () без вызова исключения, если оно не существует?[Когда FirstOrDefault не помогает] - PullRequest
0 голосов
/ 03 декабря 2018

Я хочу получить First с использованием Linq2Sql без вызова исключения, если результат не был найден.

Я знаю FirstOrDefault, но тогда, если я получу значение по умолчанию, я не знаю, еслион был в базе данных или был возвращен как OrDefault.

Есть ли способ получить First без вызова исключения, но с зная, получено ли полученное значение из базы данных?

Я знаю, что сначала могу проверить Any(), но это означает, что нужно дважды обратиться к базе данных.Я хотел бы избежать этого, если это возможно.

1 Ответ

0 голосов
/ 03 декабря 2018

Если я правильно вас понимаю, ваша проблема возникает из-за того, что вы проецируете столбец, который может содержать пустые значения, и вы не можете различить FirstOrDefault(), возвращающий ноль, поскольку поле было пустым, а запись не была найдена:

var lastName = persons
    .Where(p => p.FirstName == 'xxx')
    .Select(p => p.LastName)
    .FirstOrDefault();

Простым решением будет проецирование вашего столбца в анонимный тип:

var record = persons
    .Where(p => p.FirstName == 'xxx')
    .Select(p => new { p.LastName })
    .FirstOrDefault();

Таким образом, если record само по себе равно нулю, то это означает, что запись не найдена.Однако если record не равно нулю, а record.LastName равно нулю, то запись была найдена со значением поля null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...