2014-01-16 40 views
0

我想过滤我的List for Reporting目的,但是我想使其尽可能动态,以便用户可以在1列或更多列上过滤。根据传入的过滤器值构建谓词

我的想法是创建一个字典,然后将其传递给将过滤出相关记录的方法,但现在我坚持如何做“动态”部分。

这是我目前的代码看起来如何,但它不工作。

filters = {CourseId,2},{CourseDescription,Maths} 

public IQueryable<Course> Filter(Dictionary<string,string> filters) 
{ 
    var a = from s in context.Courses 
        select s; 
    foreach (var filter in filters) 
    { 
     if(!string.IsNullOrEmpty(filter.Value)) 
     { 
      a = a.Where(s => s./*filter.Key*/.ToUpper().Contains(/*filter.value*/.ToUpper())); 
     } 
    } 
} 

请有人协助,并指出我正确的方向,以便我能得到这个工作。

谢谢。

+0

您的'filters'定义与'Dictionary '声明不匹配。你的代码中没有任何'string' ... – MarcinJuraszek

+0

也许这个问题与你正在做的事情有关? http://stackoverflow.com/questions/848415/linq-dynamic-where-clause – Mark

+0

这个由微软某人编写的程序可以通过字符串参数来构建IQueryable,事实上它和Visual Studio一起在Samples中,即Dynamic .cs.http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx –

回答