Linq查询使用泛型

本文关键字:泛型 查询 Linq | 更新日期: 2023-09-27 18:03:24

嗨,我在我的EF存储库中有以下泛型类型方法

 public class EFRepository<T> : IRepository<T> where T : class
    {
        public EFRepository(DbContext dbContext)
        {
            if (dbContext == null) 
                throw new ArgumentNullException("dbContext");
            DbContext = dbContext;
            DbSet = DbContext.Set<T>();
        }
        protected DbContext DbContext { get; set; }
        protected DbSet<T> DbSet { get; set; }
        public virtual IQueryable<T> GetAll()
        {
            return DbSet;
        }
        public virtual IQueryable<T> GetById(int loc_id)
        {
            return DbSet(loc_id);
        }
     }

在DbSet(loc_id)上,我得到智能感知说"方法,委托或事件是预期的"

请让我知道如何正确地编写此查询以使用loc_id返回列表。由于

Linq查询使用泛型

您的T类型应该从具有LocId属性的其他类型继承。例子:

public class DatabaseEntity {
   // This is the type all your specific database entity types
   // should be inherited from
   public int LocId {get; set;}
}

然后你实现你的通用存储库方法:

public virtual IQueryable<T> GetAll(int loc_id) where T: DatabaseEntity
{
    return DbSet<T>().Where(item => item.LocId == loc_id);
}

您可能必须根据您的实体的loc_id属性名称编辑Where子句中的lambda,但这应该可以工作。它使用LINQ查询DBSet中的任何实体。loc_id =传递给GetById的loc_id

public virtual IQueryable<T> GetById(int loc_id)
{
    return DbSet.Where(x=>x.loc_id == loc_id).AsQueryable();
}