Я думаю, что пример, который вы пытаетесь, не работает, потому что он возвращает IEnumerable<Student>
, а ваш метод должен возвращать List<Student>
;
Вам также не хватает скобок, необходимых для группировкиваши &&
предложения вместе, поэтому они разделены оператором ||
.
Один из способов решения этой проблемы - изменить тип возвращаемого значения вашего метода на IEnumerable<Student>
и добавить некоторые скобкивокруг ваших &&
предложений:
public IEnumerable<Student> GetStudentBySelectedLecturer(List<Student> linkedList,
string text)
{
var lecturerInformation = text.Split(' ');
return from stud in linkedList
where (stud.LecturerFirstName == lecturerInformation[0] &&
stud.LecturerLastName == lecturerInformation[1]) ||
(stud.LecturerFirstName == lecturerInformation[1] &&
stud.LecturerLastName == lecturerInformation[0])
select stud;
}
Другим способом было бы преобразование возвращаемого значения в List<Student>
:
public List<Student> GetStudentBySelectedLecturer(List<Student> linkedList,
string text)
{
var lecturerInformation = text.Split(' ');
return (from stud in linkedList
where (stud.LecturerFirstName == lecturerInformation[0] &&
stud.LecturerLastName == lecturerInformation[1]) ||
(stud.LecturerFirstName == lecturerInformation[1] &&
stud.LecturerLastName == lecturerInformation[0])
select stud).ToList();
}
Конечно, все еще существуют некоторые потенциальные проблемы, такие какесли linkedList
или lecturer
равен null
, или если в text
нет пробела (вы получите IndexOutOfRangeException
при попытке доступа к индексу 1
).Кроме того, вы можете использовать метод Contains
в массиве имен лекторов, чтобы упростить ваше where
условие:
Вы можете решить эти проблемы, выполнив что-то вроде:
public IEnumerable<Student> GetStudentBySelectedLecturer(List<Student> students,
string lecturer)
{
if (students == null || lecturer == null) return null;
var lecturerName = lecturer.Split(' ');
return from student in students
where lecturerName.Contains(student.LecturerFirstName) &&
lecturerName.Contains(student.LecturerLastName)
select student;
}