Исключение 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,

Но это не помогло.

0 ответов

Другие вопросы по тегам