Пытаюсь проверить, совпадают ли ClassID студента и Class_Schedule ClassID - PullRequest
0 голосов
/ 20 февраля 2020
var sched = db.Class_Schedule.Select(p=>p.ClassID);

var classStudents = db.Students.Where(p => p.Enrollments.Select(q=>q.ClassID).Equals(sched));
return View(classStudents.ToList());

Я пытаюсь проверить ClassID студента через таблицу регистрации и посмотреть, совпадает ли она с ClassID таблицы Class_Schedule.

Это исключение I получаю:

'System.NotSupportedException:' Невозможно сравнить элементы типа 'System.Collections.Generi c .IEnumerable`1 [[System.Int32, mscorlib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = b77a5c561934e089]] '. Поддерживаются только примитивные типы, типы перечисления и типы объектов. ''

Ответы [ 2 ]

1 голос
/ 20 февраля 2020

sched в вашем примере имеет тип IEnumerable<string>, и результат p.Enrollments.Select(q=>q.ClassID) тоже. Тем не менее, .Equals() может сравнивать только при наличии ошибок типы примитивов (string, int, et c), но вы вызываете его на IEnumerable с аргументом IEnumerable, поэтому он завершается неудачей.

То, что вы хотите сделать, - это поиск среди учеников, у которых есть Any регистрация, которая есть в их расписании. Так что вместо этого попробуйте

var classStudents = db.Students.Where(s => s.Enrollments.Any(e => sched.Contains(e.ClassID)));
1 голос
/ 20 февраля 2020

используйте Intersect

var sched = db.Class_Schedule.Select(p => p.ClassID).ToList();
var classStudents = db.Students.Where(p => p.Enrollments.Select(q=>q.ClassID).ToList().Intersect(sched).Any());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...