Entity Framework Query # 1

2

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

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


    // Here 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
    в чем именно проблема?: Вы получаете исключение? Ноль результатов? Слишком много результатов? ???
Теги:
entity-framework
entity

3 ответа

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

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

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. Как это было реализовано, было для меня несущественно.
1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню