2009-10-29 6 views
2

Я пытаюсь выяснить, как ограничить свой ребенок набор данных включают только активные записи ...Entity Framework запрос # 1

// 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)); 

Очевидно ни один из них не работают. Я не уверен, как еще это сделать ...

+2

Что именно проблема? Вы получаете исключение? Нулевые результаты? Слишком много результатов? ??? – jrista

ответ

1

Посмотрите на Alex James Tip 37. Согласно примеру, в связанной статье, это может быть сделано, как это:

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); 

Каждая история внутри «истории» должны иметь только активные задачи.

1

Единственный способ я нашел, чтобы «имитировать», что я хочу, чтобы использовать ...

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

Тогда в Еогеасп в ...

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

Но это, конечно, возвращает намного больше записей, чем я хочу.

2

Вам нужно что-то вроде этого:

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

Тогда, на ваш взгляд:

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

Это очень старый вопрос .... «29 окт 2009» Спасибо, но я пытался ИЗБЫТЬ, используя foreach. То, как это было реализовано, было несущественным для меня. – Altonymous

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