2013-04-02 6 views
2

Использование метода include не включает дочерние элементы коллекции.Linq включает детей из коллекции

var abuseCaseQuery = 
    from @event in 
    context.AbuseEvents.Include("AbuseCase.AbuseCaseStatus.Status") 
    select new 
    { 
    @event.SecurityGroupId, 
    @event.AbuseCaseId, 
    @event.AbuseCase.AbuseCaseStatus 
    } 
; 

var abuseCases = abuseCaseQuery.ToList(); 

Список abuseCases содержит все AbuseCasesStatus и StatusId но Status объект является нулевым.

EDMX:

edmx

Как я могу заполнить Status навигационный недвижимость?

ответ

1

В EF, Includes игнорируются при добавлении проекции с Select.

Таким образом, вы должны явно выбрать все данные, которые вы хотите:

select new 
{ 
    @event.SecurityGroupId, 
    @event.AbuseCaseId, 
    @event.AbuseCase.AbuseCaseStatuses 
    .Select(acs => new { AbuseCaseStatus = acs, Status = acs.Status }) 
} 

Это приводит к «плоскому» объекту, так что вы могли бы исправить граф объектов впоследствии:

foreach(var abuseCase in abuseCases) 
{ 
    foreach(var acs in abuseCase.AbuseCaseStatuses) 
    { 
    acs.AbuseCaseStatus.Status = acs.Status; 
    } 
} 
+0

Мне не удалось выбрать коллекцию @ event.AbuseCase.AbuseCaseStatus.Status. Я пытаюсь использовать функцию select many, но имею проблемы с ней. –

+0

Таблица 'AbuseCaseStatus' имеет столбец' StatusId', поэтому свойство навигации 'Status' должно быть единственным объектом' Status' - это не так? –

+0

Извините, я не понял. Да, объект 'AbuseCaseStatus' имеет один' Status', но в моем select '@ event.AbuseCase.AbuseCaseStatus' представляет собой совокупность всех' AbuseCaseStatus' для этого 'AbuseCase' –

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