У меня нет удобной проверки компилятора, но похоже, что вы используете многострочный лямбда-синтаксис, но задаете голое выражение. Компилятору это не понравится, он ожидает утверждения, а не выражения. Два синтаксиса отличаются следующим образом:
Dim singleLinelambda = Function(x) x + 1
Dim multiLineLambda = Function(x)
Return x + 1
End Function
Попробуйте вместо этого:
resultSet = resultSet.Where(Function(x)
Return AttendanceList(AttendanceListLookupMode.AttendanceTypeIsNot,
CommonAttendanceTypeIDs.Absent,
CommonEventIDs.Learning,
ForDate).Contains(x.StudentID) Or
AttendanceList(AttendanceListLookupMode.AttendanceTypeIsNot,
CommonAttendanceTypeIDs.Absent,
CommonEventIDs.Basketball,
ForDate).Contains(x.StudentID)
End Function)
Лично я бы переместил лямбда-тело в отдельный метод с параметрами. Это сделало бы код более читабельным, например,
Private Function MyPredicate(Mode As AttendanceListLookupMode, AttendaceTypeID As Integer, EventID1 As Integer, EventID2 As Integer, EventOccurenceDate As Date, StudentID As Integer) As Boolean
Return AttendanceList(Mode,
AttendaceTypeID,
EventID1,
EventOccurenceDate).Contains(StudentID) Or
AttendanceList(Mode,
AttendaceTypeID,
EventID2,
EventOccurenceDate).Contains(StudentID)
End Function
' Usage...
resultSet = resultSet.Where(Function(x) MyPredicate(
AttendanceListLookupMode.AttendanceTypeIsNot,
CommonAttendanceTypeIDs.Absent,
CommonEventIDs.Learning,
CommonEventIDs.Basketball,
ForDate,
x.StudentID))