首页 新闻 赞助 找找看

entityframework如何动态根据类型添加条件

0
悬赏园豆:50 [待解决问题]

大致的需求如下:

如果某个实体实现了ILogicDelable(逻辑删除接口)

我就在全局的查询条件中 制动加上 条件 让所有的查询数据都查询没有删除的情况

public interface ILogicDelable
    {
        bool IsDel
        {
            get;
            set;
        }
    }

查询语句如下:

public virtual IQueryable<TEntity> Get(
            Expression<Func<TEntity, bool>> filter = null,
            Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,
            string includeProperties = "")
        {
            IQueryable<TEntity> query = dbSet;

            if (filter != null)
            {
                query = query.Where(filter);
                // bool judeg = typeof(TEntity).IsAssignableFrom(typeof(ILogicDelable)); 判断是否继承
                // 如果 TEntity  继承 ILogicDelable 添加条件  where (p=>p.IsDel == false)
               
            }

            foreach (var includeProperty in includeProperties.Split
                (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
            {
                query = query.Include(includeProperty);
            }

            if (orderBy != null)
            {
                return orderBy(query);
            }
            else
            {
                return query;
            }
        }

注释部分就是我要写代码的位置。

 

小眼睛老鼠的主页 小眼睛老鼠 | 老鸟四级 | 园豆:2731
提问于:2014-02-14 10:20
< >
分享
所有回答(3)
0

bool IsSubclassOf(Type c):判断当前类是否是类c的子类。不知道是否适用于接口 你可以试试

//判断Student是否是Person的子类 bool r = typeof(Student).IsSubclassOf(typeof(Person));//Tru
wolfy | 园豆:2636 (老鸟四级) | 2014-02-14 12:54

我会判断 但是怎么加条件?

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-02-14 18:04
0

把函数入口的Expression<Func<TEntity, bool>> filter改为

List<Expression<Func<TEntity, bool>>> filters,调用filters.Add就可以了

空明流光 | 园豆:106 (初学一级) | 2014-02-16 11:44

改了以后,你就需要

foreach(var filter in filters)

 query = query.where(filter);

支持(0) 反对(0) 空明流光 | 园豆:106 (初学一级) | 2014-02-16 11:45

@沧海一杰: 这里的问题是 

因为我不知道TEntity 是不是ILogicDelable的 就算 我通过反射 知道 当前实体是TEntity类型的

我也无法写 where (p=>p.IsDel == false) 因为c#并不知道 我当前类型是否有IsDel 这个属性

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-02-28 11:15
0

这里我使用的是 强制限定 多态 TEntity 的类别完成的

但是实际上可以不用这种方式

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-11-29 09:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册