2016-06-09 6 views
1

Ich habe eine Methode, die eine DbSet von einer Entity Framework-Datenbank aufruft:Entity Framework - Wie wird Include an Methodenaufruf übergeben?

public static List<CostEntryVM> ToViewModelList(this DbSet<CostEntry> CostEntrys, Expression<Func<CostEntry, bool>> query) { 

     return AutoMapper.Mapper.Map<List<CostEntry>, List<CostEntryVM>>(
       CostEntrys 
       .Include(x => x.Job) 
       .Include(x => x.User) 
       .Where(query) 
       .ToList()); 
    } 

Um dies verwende ich zum Beispiel dann tun können:

CostEntrys.ToViewModelList(x => x.Active == true); 

ich auch anrufen möchten in der Lage sein:

 CostEntrys.ToViewModelList(x => x.Include(y => y.Job).Include(y.User), x => x.Active == true); 

Ich kann nicht für das Leben von mir herausfinden, wie die Methodensignatur aussehen sollte oder wie ich das dann auf das DbSet anwenden würde.

Wie kann ich das tun?

Antwort

1

Zuerst müssen Sie die Erweiterungsmethode ändern:

public static List<CostEntryVM> ToViewModelList(
     this DbSet<CostEntry> CostEntrys, 
     Expression<Func<CostEntry, bool>> query, 
     Func<IQueryable<CostEntry>, IQueryable<CostEntry>> func) 
{ 
    // Adding the predicate query 
    IQueryable<CostEntry> queryable = CostEntrys.Where(query); 

    // Adding include paths 
    IQueryable<CostEntry> queryableWithFetch = func(queryable); 

    // Executing the query and map it to the view model object 
    return AutoMapper.Mapper.Map<List<CostEntry>, List<CostEntryVM>>(
      queryableWithFetch.ToList()); 
} 

Und dann kann man es nennen:

CostEntrys.ToViewModelList(
     x => x.Active == true, 
     x => x.Include(y => y.Job).Include(y.User)); 
Verwandte Themen