IncludeFilter inGeneric Repository

时间:2017-08-09 02:13:52

标签: c# linq entity-framework-6 entity-framework-plus

我也需要过滤器。我在所有表中都有记录状态。所以我需要根据这个过滤记录。为了适应这种情况,我使用了Z.EntityFramework.PlusIncludeFilter方法。

我的通用数据代码如下;

    public async Task<T> GetAsync(int id, params Expression<Func<T, object>>[] includes)
    {
        var query = _context.Set<T>().AsQueryable(); //.FindAsync(id);

        if (includes.Length > 0)
        {
            query = includes.Aggregate(query,
              (current, include) => current.IncludeFilter(include));
        }
        var item = await query.FirstOrDefaultAsync(x => x.Id == id);
        return item;
    }

当我包含来自调用方法(业务类)的条件时,其工作正常。但我不想把这些条件包含在所有地方。所以我需要改变这个方法来包含where条件。

请帮我做。我的include参数

中没有任何扩展名

注意:我需要在每个include中包含where条件。

1 个答案:

答案 0 :(得分:0)

理论上,您可以使所有实体类型实现一个具有IRecord属性的接口(RecordStatus?)。

然后,您可以将include参数更改为Expression<Func<T, IRecord>>[]

棘手的部分是根据你给出的表达式构造新的include表达式,在每个表达式上添加&& r.RecordStatus == "whatever"。做类似事情的代码可能有点难看,但它应该是可能的。