c# - tabla - nuevos elementos quimicos 2018
Obtener una lista de elementos por su ID en el marco de la entidad (3)
Algo como esto debería funcionar si user.Roles es una lista de ints:
var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));
Eso lo convierte en un "SELECT WHERE IN (x, y, z ...)" en SQL.
¿Cómo puedo obtener todos los elementos que están en otra lista por ID? Por ejemplo; Tengo roles de lista; Me gustaría obtener todos los roles de la base de datos que están en esta lista por su ID.
Estoy usando el código primero.
Hice esto y arrojé un error:
var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId));
RoleId
es de tipo int.
Error:
No se puede crear un valor constante de tipo ''SampleMVC.Domain.Role''. En este contexto, solo se admiten los tipos primitivos (''como Int32, String y Guid'').
No puede combinar una lista local con datos remotos, entonces no hay nada para que la base de datos lea desde que los datos son elsewere (en su cliente).
Creo que podría haber una mejor solución a lo que estás tratando de hacer;
Parece que estás intentando recuperar todos los roles asignados a un usuario específico. Si ese es el caso, sugeriría una solución en la que está pasando el ID de usuario actual a la base de datos y obtener los roles asignados con un INNER JOIN.
Dependiendo de su base de datos, podría verse algo como esto (si está conectando usuarios con roles a través de una tabla llamada ''UserRoles'')
var roles = db.UserRoles.Where(x => x.UserID == <insert id>).Select(x => x.Role)
(Por supuesto, también puede crear un procedimiento almacenado que devuelva una lista de ''Role'' si lo desea directamente en su base de datos y asignarlo).
var listOfRoleId = user.Roles.Select(r => r.RoleId);
var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));