Nous souhaitons créer une fonction générique qui sélectionnera uniquement les colonnes requises plutôt que de renvoyer l'entité entière. Par exemple j'ai une classe de pays qui a les propriétés suivantes.Sélection de colonnes spécifiques dans une fonction de référentiel générique
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CountryId { get; set; }
[Required]
public string Name { get; set; }
public int CreatedBy {get;set;}
public DateTime CreatedDate {get;set;}
Et j'ai une classe respiratoire qui est commune pour toutes les entités.
public class Repository<T> : IRepository<T> where T : class
{
DbContext db;
DbSet<T> currentEntity;
public Repository(DbContext db)
{
this.db = db;
currentEntity = db.Set<T>();
}
public void Add(T TEntity)
{
currentEntity.Add(TEntity);
}
public virtual List<T> GetAll()
{
return currentEntity.ToList<T>();
}
}
Comme méthode GetAll
retourne toutes les colonnes, mais je veux de ne sélectionner que Name
et CountryId
. Comment puis-je créer une fonction générique qui ne retournerait que les données requises?
En C# cela signifierait que vous devez renvoyer des types anonymes ou dynamiques de votre référentiel. Je ne pense pas que tu devrais vouloir ça, n'est-ce pas? Il peut être préférable de retourner 'IQueryable' au lieu de 'List ' afin que le consommateur puisse appliquer des projections efficacement. –
Oui, je souhaite renvoyer des types dynamiques à partir de mon référentiel. Puis-je utiliser un délégué générique comme Action <> et le passer à la méthode Select de Linq pour créer un objet de type anonyme qui ne contiendra que deux propriétés de l'entité de pays. –