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()));
}
}
}
请有人协助,并指出我正确的方向,以便我能得到这个工作。
谢谢。
您的'filters'定义与'Dictionary'声明不匹配。你的代码中没有任何'string' ... –
MarcinJuraszek
也许这个问题与你正在做的事情有关? http://stackoverflow.com/questions/848415/linq-dynamic-where-clause – Mark
这个由微软某人编写的程序可以通过字符串参数来构建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 –