2013-07-18 3 views
2

Учитывая метод подписи, как так ...Как передать предикат выражения Linq

IEnumerable<Student> get(Func<DataRow, bool> predicate); 

Как я могу передать аргумент предиката вместе с выражением Linq?

public override IEnumerable<Student> get(Func<System.Data.DataRow, bool> predicate = null) { 
    var students = from student in _dataSet.Tables[0].AsEnumerable() 
       join attendance in _dataSet.Tables[1].AsEnumerable() 
       on student.Field<int>("id") equals attendance.Field<int>("idStudent") 
       join grade in _dataSet.Tables[2].AsEnumerable() 
       on student.Field<int>("id") equals grade.Field<int>("idStudent") 
       join assignment in _dataSet.Tables[3].AsEnumerable() 
       on student.Field<int>("id") equals assignment.Field<int>("idStudent") 
       // where predicate?? 
       // select blahblahblah 
    // return statement 

} 

ответ

2

Я думаю, что вы хотите:

where predicate == null || predicate(student) 
3

Поскольку predicate это функция, которая принимает DataRow в качестве входного сигнала - использовать его как where predicate(student).

var students = from student in _dataSet.Tables[0].AsEnumerable() 
    ... 
    where predicate == null || predicate(student) 
    select student 
+1

Поскольку это выглядит как предикат может быть пустым, это займет немного больше работы, чтобы учесть возможность того, что это не предусмотрено. – StriplingWarrior

+0

@ StriplingWarrior мудрый парень, а? – McGarnagle

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