2017-11-08 5 views
1

Ich verwende EF Core 2.0 und möchte die Child-Auflistung filtern. Kann mir jemand helfen, wie man das in EF Core 2.0 macht?Entifyframework Core 2.0-Filter in ThenInclude

var items = await _context.RiskType 
           .Include(r => r.Categories) 
           .ThenInclude(category => category.Alerts) 
           .ToListAsync(); 

In dem obigen Code i category.Alerts.where(alert=>alert.caseId==1)

Dank

+2

Noch nicht unterstützt. Siehe [Supporte filtered Include # 1833] (https://github.com/aspnet/EntityFrameworkCore/issues/1833) Anfrage. –

Antwort

0

Wie gesagt in einen der Kommentare filtern mag dies noch nicht unterstützt wird. Sie können es jedoch auf viele Arten umgehen.

Zuerst können Sie. Wählen Sie() die benötigten Daten in ein anonymes oder DTO-Objekt und arbeiten Sie damit. Beachten Sie, dass in dem Beispielcode unterhalb der .Include() von EF Core ignoriert wird, da es eine .Select() - Methode gibt. Wie auch immer ich es für die Klarheit verwende.

Parent[] parents = context.Parent 
          .Include(p => p.Children) 
          .Select(p => new 
          { 
           FilteredChildren = p.Children.Where(/*Filter Func for the children collection*/) 
          }) 
          .ToArray(); 

Die andere Möglichkeit ist das explizite Laden von Entitäten für ein bestimmtes Parent, das Sie benötigen. Das ist gut, wenn Sie Kinder nur für einige der Eltern laden müssen, aber wenn Sie eine große Sammlung haben und alle Kinder laden möchten, denken Sie daran, dass das explizite Laden eine Reise in die Datenbank erfordert. Im folgenden Codebeispiel geben Sie an, dass Sie .Load() a .Collection() für einen übergeordneten Eintrag laden möchten und wenn Sie es filtern möchten, müssen Sie .Query() verwenden, damit Sie die Abfrage abrufen können, die verwandt werden soll die Entitäten und wenden Filter mit .Where() Methode an. Am Ende müssen Sie nur .Load() sagen, um die untergeordneten Objekte in der übergeordneten Einheit zu laden. Wenn Sie das explizite Laden für eine Navigationseigenschaft verwenden möchten, die keine Sammlung ist, müssen Sie die Methode .Reference() anstelle von .Collection() verwenden.

Ich bin ziemlich neu zu EF und wenn jemand mehr Vorschläge hat, würde ich gerne auf sie schauen.

Verwandte Themen