Получить список элементов по их ID в entity framework
Как я могу получить все элементы, которые находятся в другом списке по ID? Например; у меня есть список ролей; я хотел бы получить все роли из базы данных, которые находятся в этом списке, по их идентификатору.
Я использую сначала код.
Я сделал это и он выдал ошибку:
var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId));
RoleId
имеет тип int.
ошибка:
невозможно создать постоянное значение типа ' SampleMVC.Домен.Роль". Только примитивные типы ('такие как int32, String, и Guid') поддерживаются в этом контексте.
3 ответов
var listOfRoleId = user.Roles.Select(r => r.RoleId);
var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));
что-то вроде этого должно работать, если пользователь.Роли-это список ints:
var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));
это превращает его в " выберите, где в (x, y, z...) "in SQL.
вы не можете объединить локальный список с удаленными данными, тогда БД нечего читать, так как данные находятся в другом месте (на вашем клиенте).
Я думаю, что может быть лучшее решение того, что вы пытаетесь сделать;
похоже, вы пытаетесь получить все роли, назначенные конкретному пользователю. Если это так, я бы предложил решение, в котором вы передаете текущий идентификатор пользователя в базу данных и получаете роли, назначенные с внутренним ПРИСОЕДИНЯТЬСЯ.
в зависимости от вашей базы данных это может выглядеть примерно так (если вы подключаете пользователей с ролями через таблицу под названием "UserRoles")
var roles = db.UserRoles.Where(x => x.UserID == <insert id>).Select(x => x.Role)
(конечно, вы также можете создать хранимую процедуру, возвращающую список "роли", если хотите, непосредственно в вашей БД и сопоставить его.)