Pergunta

Eu estou tentando descobrir como limitar o meu conjunto de dados filho para incluir apenas registos activos ...

    // Here's what I have currently...
    m_BackLoggerEntities.Stories
     .Include("Sprints")
     .Include("Tasks")
     .Include("Efforts")
     .Include("Products")
     .First(s => s.StoryId == id);


    // Here's what I thought I could do...
    m_BackLoggerEntities.Stories
     .Include("Sprints")
     .Include("Tasks")
     .Include("Efforts")
     .Include("Products")
     .Where(s => s.Tasks.Active)
     .First(s => s.StoryId == id);


    // I also tried this...
    m_BackLoggerEntities.Stories
     .Include("Sprints")
     .Include("Tasks")
     .Include("Efforts")
     .Include("Products")
     .First(s => s.StoryId == id && s => s.Tasks.Active));

Obviamente nenhum deles estão trabalhando. Eu não tenho certeza de que outra forma de fazer isso ...

Foi útil?

Solução

Dê uma olhada em Alex James Dica 37 . De acordo com o exemplo no artigo ligado, isso pode ser feito assim:

var query = from story in m_BackLoggerEntities.Stories
            where story.StoryId == id
            select new {
                          story,
                          Tasks = from task in story.Tasks
                                  where task.Active
                                  select task
                       };

var stories = query
   .AsEnumerable()
   .Select(x => x.Story);

Cada dentro História de "histórias" deve ter apenas tarefas ativas.

Outras dicas

Você precisa de algo como isto:

Model = m_BackLoggerEntities.Stories
    .Include("Sprints")
    .Include("Tasks")
    .Include("Efforts")
    .Include("Products")
    .SingleOrDefault(s => s.StoryId == id);

Então, na sua opinião:

@foreach (var task in Model.Tasks.Where(t => t.Active))

A única maneira que eu encontrei para "simular" o que eu quero é usar ...

        var storyToDetail =
            m_BackLoggerEntities.Stories
                .Include("Sprints")
                .Include("Tasks")
            .Include("Efforts")
            .Include("Products")
                .First(s => s.StoryId == id);

Em seguida, no foreach na vista ...

            <% foreach (var task in Model.Tasks.Where(t => t.Active))

Mas isso, claro, traz de volta muitas mais registros, em seguida, eu quero.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top