Ho bisogno di una query che restituirà tutti i Driver
, inclusa la raccolta Departures
per ciascuno, in cui ogni raccolta viene filtrata dalle proprietà di Departure
.
Questa query:
// id supplied by HTTP POST
var driver = await _context.Drivers
.Include(d => d.Departures.Where(dd => dd.Acknowledged == false))
.SingleOrDefaultAsync(m => m.ID == id);
Genera un errore:
InvalidOperationException: l'espressione della proprietà 'd => {da Partenza dd in d.Departures dove ([dd] .Acknowledged == False) select [dd]}' non è valida. L'espressione dovrebbe rappresentare un accesso alla proprietà: 't => t.MyProperty'. Per ulteriori informazioni sull'inclusione dei dati correlati, vedere http://go.microsoft.com/fwlink/?LinkID=746393 .
Cosa non sto comprendendo?
Driver
ha molte Departures
Departure
ha un solo Driver
autista:
public class Driver
{
public int ID { get; set; }
...
public virtual ICollection<Departure> Departures { get; set; }
}
Partenza:
public class Departure
{
public int ID { get; set; }
public Boolean Acknowledged { get; set; }
...
public int DriverID { get; set; }
public virtual Driver Driver { get; set; }
}
Utilizzo di EF Core 2.0 con VS Studio per Mac.
È possibile configurare un filtro di query in DbContext.
modelBuilder.Entity<Administrator>()
.HasQueryFilter(admin => !EF.Property<boolean>(admin, "IsDeleted"));
dovrebbe fare il trucco
Link di riferimento: https://docs.microsoft.com/en-us/ef/core/querying/filters
Dovresti cambiare la condizione interna usando Any
invece di Where
, come:
.Include(z => z.WorkPlaces)
.Where(x => x.WorkPlaces.Any(y => !y.IsDeleted))