Entity Framework Abfrage # 1
-
10-07-2019 - |
Frage
Ich versuche, herauszufinden, wie mein Kind-Datensatz zu begrenzen, um nur aktive Datensätze umfasst ...
// 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));
Natürlich keiner von ihnen arbeiten. Ich bin mir nicht sicher, wie sonst, dies zu tun ...
Lösung
Werfen Sie einen Blick auf Alex James Tipp 37 . Gemäß Beispiel in verlinkte Artikel, kann es wie folgt geschehen:
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);
Jede Geschichte innerhalb von „Geschichten“ sollte nur dann aktiv Aufgaben hat.
Andere Tipps
Sie brauchen so etwas wie folgt aus:
Model = m_BackLoggerEntities.Stories
.Include("Sprints")
.Include("Tasks")
.Include("Efforts")
.Include("Products")
.SingleOrDefault(s => s.StoryId == id);
Dann in Ihrer Ansicht:
@foreach (var task in Model.Tasks.Where(t => t.Active))
Die einzige Möglichkeit, die ich gefunden habe, um „zu simulieren“, was ich will zu verwenden ist ...
var storyToDetail =
m_BackLoggerEntities.Stories
.Include("Sprints")
.Include("Tasks")
.Include("Efforts")
.Include("Products")
.First(s => s.StoryId == id);
Dann in der foreach in der Ansicht ...
<% foreach (var task in Model.Tasks.Where(t => t.Active))
Aber das bringt natürlich viel mehr Datensätze zurück dann will ich.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow