Я использую NHibernate, который абстрагируется, используя репозитории и сервисы. Нам не разрешено использовать свойства Lazy Load, поэтому они должны быть выбраны в запросе.LINQ Lambda выбрать только если существует
Моя проблема заключается в том, что я пытаюсь получить самый последний номер ответа из таблицы «Ответы», но во многих случаях объект может не существовать, поэтому я застрял в получении исключений Null Reference или «Код должен быть недоступен», исключения.
Вот что я делаю с соответствующими разделами, прокомментированными. .
var leaders =
_storeService.GetAll()
.Where(p => p.Id.Equals(storeId) && p.Employees.Any())
.SelectMany(p => p.Employees)
.Select(emp => new
{
LeaderId = emp.Id,
LeaderFirstName = emp.FirstName,
LeaderLastName = emp.LastName,
Followers = emp.Followers
.Select(followers => new
{
followers.FollowerEmployee.Id,
followers.FollowerEmployee.FirstName,
followers.FollowerEmployee.LastName,
DepartmentName = followers.FollowerEmployee.Department.Name,
//Problem Area
AssessmentResponse = followers.FollowerEmployee
.Answers
.First(a => a.Answer.Question.IsPrimary)
.Answer
.Number
//Null Reference Exception
})
}).ToList();
Я, вероятно, пытался 15 итераций этого, не всегда используя .Первый но иногда Одиночная
У меня нет доступа к хранилищу шаблону или любой из запросов NHibernate. Есть ли способ избежать этого исключения с нулевой ссылкой с LINQ? Я не могу лениться, так что это немного проблема.
FirstOrDefault может быть? – jfin3204
Я пробовал FirstOrDefault, SingleOrDefault, Single, First, Take (1) ... Исключение Null Reference или «Код должен быть недоступен». –
Отступы здесь делают это * действительно * трудным для чтения ... –