2014-01-16 2 views
0

Я хотел бы отфильтровать мой список для целей отчетности, но я хотел бы сделать его максимально динамичным, чтобы пользователь мог фильтровать по 1 или более столбцам.Build Predicate, основанный на значениях фильтра, переданных в

Идея, которую я имею, заключается в том, чтобы создать словарь, а затем передать это методу, который будет отфильтровывать соответствующие записи, но теперь я зациклился на том, как я буду делать «динамическую» часть.

Вот как выглядит мой текущий код, но он не работает.

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 'declaration. У вас нет строки в вашем коде ... – MarcinJuraszek

+0

Возможно, этот вопрос связан с тем, что вы пытаетесь сделать? http://stackoverflow.com/questions/848415/linq-dynamic-where-clause – Mark

+0

Этот, написанный кем-то из Microsoft, может создавать IQueryable по параметрам строк, и он фактически находится в Образцах вместе с Visual Studio, а именно Dynamic .cs.http: //weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx –

ответ

0

Недавно я использовал http://www.albahari.com/nutshell/predicatebuilder.aspx для динамического создания предиката для использования с Entity Framework на основе полученных критериев. Хорошо работает.

Смежные вопросы