Linq查询使用泛型

时间:2014-05-15 10:08:23

标签: c# linq entity-framework

您好我的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)上我得到了智能说法&#34;方法,代表或事件是预期的&#34;

请让我知道如何正确编写此查询以使用loc_id获取列表。 谢谢

2 个答案:

答案 0 :(得分:0)

您的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);
}

答案 1 :(得分:0)

您可能必须根据实体的loc_id属性名称编辑Where子句中的lambda,但这应该有效。它使用LINQ来查询您的DBSet,其中entity.loc_id等于传递给GetById的loc_id

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