我有一个通用的存储库,我想过滤通用存储库中的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<>));
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。