Получить список элементов по их 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)

(конечно, вы также можете создать хранимую процедуру, возвращающую список "роли", если хотите, непосредственно в вашей БД и сопоставить его.)