Я играю с базой данных MySQL, используя инфраструктуру сущностей ADO (через devart dot.connect).
Я получаю списки объектов сущностей (a) из списков и хочу сделать запрос linq, извлекающий все объекты из данной таблицы сущностей (b), где есть внешний ключ b:
//THIS WORKS :
IQueryable<Nb_student> nbstud = MainForm.context.Nb_student_set;
IQueryable<Cat_student> catstud = MainForm.context.Cat_student_set.Where(c => c.id == 2);
var test1 = from nb in nbstud
join bb in catstud on nb.cat_student_id equals bb.id
select nb;
=> это дает мне только соответствие nb_students (это то, что я хочу ...)
Теперь предположим, что вместо catstud у меня есть список, заполненный через список.
IEnumerable<Cat_student> catstud2 = param_cat_students.AsEnumerable();
var ttt2 = from nb in nbstud
join bb in catstud2 on nb.cat_student_id equals bb.id
select nb;
=> это не работает, ошибка следующая: {"Невозможно создать постоянное значение типа 'System.Collections.Generic.IEnumerable`1'. Только примитивные типы (', такие как Int32, String, и Guid ') поддерживаются в этом контексте. "}
Кажется, есть проблема с идентификаторами (int32) для объединения ???
В более общем плане, мой вопрос таков: в Linq to Entity, как выбирать элементы из таблицы, соответствующие различным спискам критериев (списки не известны заранее, так как они выбираются пользователями), без создания большого количества циклов. Думаю, что решением было Join, я также безуспешно попробовал синтаксис .any и .contain:
var tt3 = from nb in nbstud.Where
(nbx => catstud2.Any(cat => cat.id == nbx.cat_student_id)
select nb;
Если бы вы могли посоветовать мне ... Я полагаю, это очень распространенная проблема, но я не знаю, как действовать дальше.
Заранее благодарю,
Pierre