Я могу точно сказать, в чем проблема, потому что это зависит от используемой версии EF Core - перевод / обработка запросов EF Core все еще нестабильна.Было бы неплохо, если бы вы включили вывод журнала EF Core, например, выполненные запросы SQL, предупреждения оценки клиента, если таковые имеются, и т. Д.
Но в общем случае такие выражения
y.User.FirstOrDefault(x => x.UserId == y.UserId).Profile.FavouriteBook.Name
всегда подозрительны - правильное выполнение зависит исключительно от реализации поставщиком запроса свойств потенциально null
«объекта», возвращаемого FirstOrDefault
.LINQ to Objects определенно выбросит NRE.EF Core, если использует оценку сервера, должен иметь возможность обрабатывать его, возвращая null
, но, согласно исключению, это не связано ни с переводом, ни с оценкой клиентского / смешанного результата.
С учетом сказанного, чтоЯ лично попытался бы использовать эквивалентный «естественный» способ возврата null
конечного значения, используя Where
+ Select
, содержащий конечное свойство, и , затем , применяя FirstOrDefault
, например,
UserFavouriteBook = y.User
.Where(x => x.UserId == y.UserId)
.Select(x => x.Profile.FavouriteBook.Name)
.FirstOrDefault() ?? "N/A"