Я пытаюсь выяснить, как ограничить набор данных для моего ребенка только активными записями...
// 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));
Очевидно, никто из них не работает. Я не уверен, как это сделать...
Взгляните на 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);
Каждая история внутри "историй" должна иметь только активные задачи.
Вам нужно что-то вроде этого:
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))
Единственный способ, которым я нашел "симулировать" то, что я хочу, - использовать...
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))
Но это, конечно, возвращает намного больше записей, чем я хочу.