【发布时间】:2017-11-28 03:12:19
【问题描述】:
我们想创建一个通用函数,它只选择需要的列而不是返回整个实体。例如,我有一个 Country 类 具有以下属性。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int CountryId { get; set; }
[Required]
public string Name { get; set; }
public int CreatedBy {get;set;}
public DateTime CreatedDate {get;set;}
我有一个所有实体都通用的呼吸类。
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>();
}
}
由于GetAll 方法返回所有列,但我只想选择Name 和CountryId。如何创建一个只返回所需数据的通用函数?
【问题讨论】:
-
在 C# 中,这意味着您必须从存储库中返回匿名类型或动态类型。我不认为你应该想要那个,是吗?返回
IQueryable<T>而不是List<T>可能会更好,这样消费者就可以有效地应用预测。 -
是的,我想从我的存储库中返回动态类型。我可以使用像 Action 这样的通用委托并将其传递给 Linq 的 Select 方法来创建一个匿名类型对象,该对象将只包含国家实体的两个属性。
标签: c# linq repository-pattern