2017-11-15 1 views
0

Gibt es mit Linq eine Möglichkeit, diese beiden Zeilen in einer Methodenkette zu konsolidieren?Filtern Einschließen von Werten in Linq

Group group = await _database.Groups.AsQueryable() 
    .Include(g => g.Children) 
    .Include(g => g.Documents) 
    .SingleOrDefaultAsync(g => g.Pk == id); 

group.Children = @group.Children.Where(c => c.Active).AsEnumerable().ToList(); 

bearbeiten Struktur zu erklären:

group ist vom Typ Group

die Children Eigenschaft auf einem Group ist ein List<Group>

+1

Selbst wenn es wäre, würde ich es nicht tun. Diese zwei Zeilen machen verschiedene Dinge. Einer fragt einen Datenspeicher ab, einer manipuliert ein Objekt. – nvoigt

+0

Der Zweck dabei ist, den Overhead eines potenziell großen Datasets zu vermeiden, der durch das Filtern ungültiger zurückgegebener Werte vermieden werden kann. –

Antwort

1

Sie nur die Datenbank tun, um die Filterung machen könnte Sie anstatt alle Kinder Datensätze zurück zu bringen:

var group = await _database.Groups.AsQueryable() 
    .Where(g => g.Pk == id) 
    .Select(g => new { 
      Children = g.Children.Where(c => c.Active).ToList(), 
      Documents = g.Documents.ToList() }) 
    .SingleOrDefaultAsync(); 
+0

Dies geht davon aus, dass die Gruppe selbst keine Eigenschaften hat ... – nvoigt

+0

Das ist ziemlich nah, aber es negiert die anderen Eigenschaften im Gruppendatenmodell und nicht mehr Kinder von Kindern usw. (Kinder ist eine Liste auf Gruppenklasse) –

+0

Sie könnten die anderen Eigenschaften in die Auswahl einschließen –

Verwandte Themen