Entity Framework Query # 1 - PullRequest
       16

Entity Framework Query # 1

2 голосов
/ 29 октября 2009

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

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

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

Ответы [ 3 ]

2 голосов
/ 22 мая 2013

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

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))
1 голос
/ 29 октября 2009

Взгляните на Алекс Джеймс Совет 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 голос
/ 29 октября 2009

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

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

Тогда в foreach в представлении ...

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

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

...