使用泛型类型将值传递给 FindById 方法不起作用



我的所有实体都有一个存储库,如下所示:

 public abstract class GenericRepository<C, T> :
    IGenericRepository<T>
        where T : class
        where C : DbContext, new()
    {
        private C _entities = new C();
        public C Context
        {
            get { return _entities; }
            set { _entities = value; }
        }
        public virtual IQueryable<T> GetAll()
        {
            IQueryable<T> query = _entities.Set<T>();
            return query;
        }
        public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
        {
            IQueryable<T> query = _entities.Set<T>().Where(predicate);
            return query;
        }
        public virtual void Add(T entity)
        {
            _entities.Set<T>().Add(entity);
        }
        public virtual void Delete(T entity)
        {
            _entities.Set<T>().Remove(entity);
        }
        public virtual void Edit(T entity)
        {
            _entities.Entry(entity).State = System.Data.Entity.EntityState.Modified;
        }
        public virtual void Save()
        {
            _entities.SaveChanges();
        }
    }
所以我创建了一个用户存储库,它继承了上面的类,如下所示:
public  class userRepository:GenericRepository<InModelContainer,User>
  {
    }

我的问题是,我如何在我的类中调用FindBy()方法,我的用户实体是这样的:

  public partial class User
    {
        public User()
        {
            this.Ideas = new HashSet<Idea>();
            this.Companies = new HashSet<Company>();
        }
        public int Id { get; set; }
        [DisplayName("نام")]
        [Required(ErrorMessage = "نام را وارد کنید")]
        public string Name { get; set; }
}

我需要找到一个用户通过id,所以我必须使用findBy方法,但我不知道如何调用这个方法。

的例子:

 userRepository objRepository= new userRepository();
       public ActionResult Edit(int id)
        {
           return View(objRepository.FindBy());
        }

我应该传递什么给上面的函数?

致以最亲切的问候。

我使用的是MVC4和EF6。

给你

   userRepository objRepository= new userRepository();
   public ActionResult Edit(int id)
    {
       return View(objRepository.FindBy(user => user.Id == id).FirstOrDefault());
    }

将根据id过滤用户,并取第一个,如果没有匹配则取null。如果你想要一个异常,你也可以选择使用。first()。

最新更新