2016-05-01 2 views
1

Я использую Entity Frameowrk 7 и имею следующий запрос LINQ для выбора данных в объект передачи данных (DTO). Чтобы выбрать данные из свойств навигации, я использую Include, чтобы активировать загрузку указанных свойств. В таблице в настоящее время имеет два ряда, но только один из них возвращается в ответ на следующий запрос:LINQ Select пропускает строку, если свойство навигации имеет значение null

var jobs = context.CorepJobs 
      .Include(j => j.CompanyNavigation) 
      .Include(j => j.WellNavigation.FieldNavigation) 
      .Select(j => 
       new CorepJobDTO() 
       { 
        Id = j.Id, 
        Created = j.Created, 
        DepthAsFeet = j.DepthAsFeet, 
        JobType = j.JobType, 
        State = j.State, 
        ProjectNo = j.ProjectNo, 
        CompanyName = j.CompanyNavigation.CompanyName, 
        WellName = j.WellNavigation.Name, 
        FieldName = j.WellNavigation.FieldNavigation.Name 
       } 
      ).AsEnumerable(); 

Если некоторые свойства null, я бы ожидать, что запрос для заполнения соответствующих свойств DTO с null. Вместо этого происходит то, что если свойство FieldNavigation равно null, вся строка пропускается и возвращается только одна из двух строк. Если я оставлю последнее свойство (FieldName) в блоке Select, возвращаются обе строки.

Я также попытался

FieldName = j.WellNavigation.FieldNavigation != null =? j.WellNavigation.FieldNavigation.Name : "" 

без удачи.

Любые идеи, что я могу делать неправильно?

+1

https://github.com/aspnet/EntityFramework/issues/3186 –

+0

Приятная находка! Это должно быть так. –

ответ

0

Прежде всего проверьте тип свойства «FieldName», принимает ли он значение null или нет. Затем попробуйте

Полевое имя = j.WellNavigation.FieldNavigation! = Null? j.WellNavigation.FieldNavigation.Name: null

+0

'FieldName' - это просто строка, поэтому она имеет значение NULL. –

Смежные вопросы