如何在c#中的泛型类型列表中应用where子句

时间:2017-06-02 00:52:59

标签: c# entity-framework linq generics

我有像这样的通用方法

 public IList<T> Get(KendoGridFilterSort.FilterContainer filter)
    {
        List<T> list = null;
        IQueryable<T> dbQuery = _entities.Set<T>();
        list = dbQuery
        .ToList<T>();
        return list;

    }

当使用特定对象初始化此方法的类时,我获得了完整的记录列表。 但我想在此方法中传递一些过滤器通用参数来相应地过滤记录。为此,我有类名KendoGridFilterSort.FilterContainer,其中包含所有带字段名称,运算符和值的过滤器 我想用这个泛型方法使用那个过滤器,我的问题是我无法使用 这个陈述例如

persons.Where(p => p.Name == name && p.Surname == surname).ToList();

那么我是否有可能在这个通用列表中应用我的过滤器?

2 个答案:

答案 0 :(得分:1)

您应该强制T类实现IEntity接口与您想要filter的属性:

public interfase IEntity
{
   string Name {get;set;}
   string Surname {get;set;}
}

public class Repository<T> where T : class, IEntity
{
    public IList<T> Get(KendoGridFilterSort.FilterContainer filter)
    {
        return _entities.Set<T>().Where(x => x.Name == filter.Name && x.Surname == filter.Surname).ToList();
    }
}

答案 1 :(得分:0)

您可以在使用IQueryable<T>

时将过滤器作为表达式树传递
public IList<T> Get(Expression<Func<T, bool>> filter)
{
    List<T> list = null;
    IQueryable<T> dbQuery = _entities.Set<T>();
    dbQuery = dbQuery.Where(filter);
    list = dbQuery.ToList<T>();
    return list;
}

虽然不清楚KendoGridFilterSort.FilterContainer正在做什么

相关问题