c# – T的通用存储库过滤器数据

c# – T的通用存储库过滤器数据,第1张

概述我有一个通用的存储库,我想过滤通用存储库中的Get数据.此方法获取数据,然后调用其他get方法并返回数据 private IQueryable<T> fetchData(Expression<Func<T, bool>> filter){ IQueryable<T> query = dbSet; if (filter != null) query = query.Where(f 我有一个通用的存储库,我想过滤通用存储库中的Get数据.此方法获取数据,然后调用其他get方法并返回数据

private Iqueryable<T> fetchData(Expression<Func<T,bool>> filter){    Iqueryable<T> query = dbSet;    if (filter != null) query = query.Where(filter);}

这是DbSet

private Readonly IDbSet<T> dbSet;

而班级实施是

public class Repository<T> : IRepository<T> where T : class

这些是Model类的类和接口

public interface IEntity<T>{    T ID { get; set; }}public interface IAuditableEntity{    bool IsDeleted { get; set; }}public abstract class Entity<T> : IEntity<T>{    [Key]    public virtual T ID { get; set; }}public abstract class AuditableEntity : Entity<string>,IEntity<string>,IAuditableEntity{    public bool IsDeleted { get; set; }}[table("Contact")]public class Contact : AuditableEntity{    [required]    [StringLength(250)]    public string Firstname { get; set; }    [StringLength(250)]    public string MIDdlename { get; set; }    [required]    [StringLength(250)]    public string Lastname { get; set; }}

现在我想过滤fetchData方法中的数据,以便只返回那些被删除= = false的记录,因为这是一个常见的功能,应该在存储库基础级别而不是在单个存储库或业务逻辑类上实现.

问题是,一旦我投射了Iqueryable< T>查询到Iqueryable< IAuditableEntity>查询我无法将其转换回Iqueryable或进一步过滤数据并返回.我尝试了这些,但没有奏效

var dbSetIAuditableEntity = dbSet as Iqueryable<AuditableEntity>;if (dbSetIAuditableEntity != null){    dbSetIAuditableEntity = dbSetIAuditableEntity.Where(d => d.IsDeleted == false);    query = (Iqueryable<T>)((object)dbSetIAuditableEntity);    query = dbSet.Where(d => ((IAuditableEntity)d).IsDeleted == false);}

实现此功能的任何建议都是通用存储库

编辑

实际上所有实体都没有实现AuditableEntity,有些实现只有IEntity< String>或IEntity< int>有些人什么都不实施.这不是很好的方法,但情况就是这样.

编辑2

这就是我通过autofac实例化Generic repository的方法

builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
解决方法 如果您想为所有实体支持此功能,那么您需要将T限制为AuditableEntity:

public class Repository<T> : IRepository<T>     where T : AuditableEntity{}

否则,如果不是所有实体都可以被约束,则从存储库< T>得到.并限制一个:

public class AuditableRepository<T> : Repository<T>     where T : AuditableEntity{}
总结

以上是内存溢出为你收集整理的c# – T的通用存储库过滤器数据全部内容,希望文章能够帮你解决c# – T的通用存储库过滤器数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1232930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存