2017-06-02 62 views
0

我有这样如何应用where子句中的泛型类型列表在C#

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

    } 

当inititate类此方法,特定对象的我得到的记录的完整列表的通用方法。 但我想在此方法中通过一些过滤器彻底参数来相应地过滤记录。为了这个,我有类名KendoGridFilterSort.FilterContainer包含所有过滤器字段名,经营者和值 我想使用这个泛型方法的过滤器,我的问题是我不能使用 这种说法例如

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

那么有没有可能将我的过滤器应用到这个通用列表中?

+2

您需要向我们展示'KendoGridFil terSort.FilterContainer'。 – Enigmativity

回答

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(); 
    } 
} 
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在做什么