Исключение NullReference при выполнении скомпилированного выражения
У меня есть выражение, указанное как:
private static Expression<Func<Request, RequestResultModel>> requestResultExpression = request =>
request.Applicant
.ApplicantAddresses
.DefaultIfEmpty()
.OrderBy(address => address.IsPreferred)
.Select(address => new RequestResultModel
{
Id = request.Id,
ApplicantName = request.Applicant.FullName,
ReviewerName = request.Reviewer.FullName,
RefferrerName = request.Refferrer.Name,
City = address.Address.City,
Province = address.Address.Province.Code,
DisciplineCode = request.Discipline.Code,
Event = request.Event,
StatusName = request.Status.Name,
Submitted = request.Submitted
})
.FirstOrDefault();
Я также повторно использую то же выражение, как это:
private static Func<Request, RequestResultModel> requestResultFunction = requestResultExpression.Compile();
К сожалению, когда Request.Applicant
не имеет ApplicantAddresses
Я получаю NullReferenceException
когда я выполняю код так:
var entity = this.DbContext.Requests.Find(id);
var model = requestResultFunction(entity);
Вопрос здесь:
City = address.Address.City,
Province = address.Address.Province.Code,
так как RequestAddress
или Address
сущности, вероятно, являются нулевыми в этом случае.
Остальные сущности выглядят примерно так
public class Applicant
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<ApplicantAddress> ApplicantAddresses { get; set; }
}
public class ApplicantAddress
{
[Key]
public int Id { get; set; }
public virtual Applicant { get; set; }
public virtual Address { get; set; }
public bool IsPreferred { get; set; }
}
public class Address
{
[Key]
public int Id { get; set; }
public string Street { get; set; }
public string City { get; set; }
public virtual Province Province { get; set; }
public string PostalCode { get; set; }
public virtual ICollection<ApplicantAddress> ApplicantAddresses { get; set; }
}
public class Province
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
}
Я попытался изменить часть, которая получает City
а также Province
чтобы:
City = address == null || address.Address == null ? null : address.Address.City,
Province = address == null || address.Address == null || address.Address.Province == null ? null : address.Address.Province.Code,
Но это не помогло.