У меня есть что-то вроде этого:
public enum CoolEnum
{
Yes = 0,
No = 1,
Perhaps = 2,
Maybe = 3,
Perchance = 4,
}
, и я хочу сделать следующее:
CoolEnum? enum = await this.context
.MyTable
.Where(x => x.Id == id)
.Select(x => x.CoolEnum)
.DefaultIfEmpty((CoolEnum?)null)
.FirstAsync();
, но я получаю ошибку
Processing of the LINQ expression 'DefaultIfEmpty<Nullable<CoolEnum>> (...) failed.
This may indicate either a bug or a limitation in EF Core.
Как Я видел здесь , кажется, это известная проблема с низким приоритетом.
Тогда я подумал, что могу сделать следующее:
CoolEnum enum = await this.context
.MyTable
.Where(x => x.Id == id)
.Select(x => x.CoolEnum)
.FirstAsync();
CoolEnum? nullableEnum = enum == default ? null : enum;
Но это изменит все мои существующие перечисления со значением по умолчанию, равным нулю, и это не то, что я хочу.
Какой чистый обходной путь можно использовать? Я вижу следующие параметры:
- Возвращает весь объект MyTable. Но если он большой, то это пустая трата ресурсов.
- Определите «нулевой» элемент по умолчанию в моем Enum.
- Разделите запрос на 2 запроса, один, чтобы увидеть, есть ли элементы и другой, чтобы получить элемент.
Ни один из них не кажется чистым. Есть идея получше?