Ich verwende das Beispiel here, um ein Repository-Muster mit Arbeitseinheit zu erstellen.Repository-Muster Nur gewünschte Spalten abrufen
Im Code, gibt es eine generische Methode Get:
public class GenericRepository<TEntity> where TEntity : class
{
internal AdminDbContext context;
internal DbSet<TEntity> dbSet;
public GenericRepository(AdminDbContext context)
{
this.context = context;
this.dbSet = context.Set<TEntity>();
}
public virtual IEnumerable<TEntity> Get(
Expression<Func<TEntity, bool>> filter = null,
Func<TEntity, TEntity> selector = null,
Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
string includeProperties = "")
{
IQueryable<TEntity> query = dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ','}, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
In diesem Moment, wenn diese Methode aufgerufen wird, werden alle Datensätze aus der Datenbank geholt und Spaltenauswahl wird im Speicher durchgeführt.
Meine Frage ist, wie kann ich hier die Get-Methode erweitern, die mir erlauben würde, Spaltennamen dynamisch an diese Methode zu übergeben, so dass nur die gewünschten Spalten auf Datenbankebene ausgewählt werden?
Ich habe versucht:
- einen String-Parameter mit dem Komma getrennte Werte der gewünschten Spalten akzeptieren aber, dass ich sie an das Unternehmen nicht zuordnen konnte.
- Erstellen eines Parameters mit dem gleichen Filtertyp, der einen Fehler ergab.
Mit '.Select()'. – CodeCaster