Sto usando il nuovo .net core e EF.
Ho bisogno di aiuto con il comando include linq. Ho alcuni modelli 1: N e se la raccolta contiene alcuni dati contrassegnati come cancellati non voglio includerli.
Come farlo?
var company = await _context.Company
.Include(y => y.Administrators)
.Include(y => y.CompanyPartTimers)
.Include(z => z.WorkPlaces)
.Include(z => z.Requirements)
.FirstAsync(x => x.Id == id);
Se aggiungo la condizione
.Include(z => z.WorkPlaces).Where(x=>x.WorkPlaces.Where(x=>!x.IsDeleted))
Non funziona. Come scrivere correttamente?
La prossima cosa è che ho un'interfaccia IDeletable e sarebbe meglio se avessi qualche espressione di linq personalizzata e potessi fare ex.
.Include(z => z.WorkPlaces).GetNonDeleted()
Qualcuno sa come farlo? Ho provato qualcosa di simile
public static class LinqExtension
{
public static IEnumerable<T> GetActive<T>(this IEnumerable<T> source) where T : class, IDeletable
{
return source.Where(x => x.IsDeleted);
}
}
Grazie ragazzi.
È 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))