Для школьного проекта мне нужно отфильтровать студентов, которые подписались на несколько курсов в тот же момент времени. Вместо того, чтобы запрашивать DB через процедуры/представления, я хочу использовать LINQ для его фильтрации в памяти для обучения.C# LINQ .Contains возвращается пустым?
Все кажется хорошо в зависимости от отладчика, однако результат моего запроса linq равен 0, и я не могу понять, как это сделать.
Вот код:
foreach (Timeblock tb in ctx.Timeblocks)
{
List<Student> doublestudents = new List<Student>();
//Get the schedules matching the timeblock.
Schedule[] schedules = (from sched in ctx.Schedules
where sched.Timeblock.Id == tb.Id
select sched).ToArray();
/\/\/\Gives me 2 schedules matching that timeblock.
if (schedules.Count() > 1)
{
doublestudents = (from s in ctx.Students
where s.Courses.Contains(schedules[0].Course) && s.Courses.Contains(schedules[1].Course)
select s).ToList();
Console.WriteLine(doublestudents.Count); <<< count results in 0 students.
}
}
При отладке, кажется, все должно работать нормально.
Каждый студент имеет список, и каждый курс HSA списка
расписания [0] .Course имеет Id 1 графики [0] .Course имеет Id 6
Студент с идентификатором 14 имеет оба эти курсы в этом списке.
По-прежнему запрос linq не возвращает этого ученика. Может ли это быть потому, что это не та же ссылка, конечно, что он не найдет матч в .Contains()?
Это сводит меня с ума, так как совершенно всячески стараюсь этого не возвратит никаких результатов, пока есть результаты ...
Спасибо! На самом деле это были разные объекты. Для этой цели очень плохо, чтобы переопределить Equals или GetHashCode. . Любой трюк :) –
Добро пожаловать. Вы правы, я бы не стал переопределять эти методы и для этого случая. –