Comment puis-je obtenir tous les éléments qui sont dans une autre liste par ID? Par exemple; J'ai des rôles de liste; Je voudrais obtenir tous les rôles de la base de données qui se trouvent dans cette liste par leur ID.
J'utilise le code en premier.
Je l'ai fait et cela a jeté une erreur:
var roles = db.Roles.Where(r => user.Roles.Any(ur => ur.RoleId == r.RoleId));
RoleId
est de type int.
Erreur:
Impossible de créer une valeur constante de type "SampleMVC.Domain.Role". Seuls les types primitifs ("tels que Int32, String et Guid") sont pris en charge dans ce contexte.
var listOfRoleId = user.Roles.Select(r => r.RoleId);
var roles = db.Roles.Where(r => listOfRoleId.Contains(r.RoleId));
Quelque chose comme ça devrait fonctionner si user.Roles est une liste d'entrées:
var roles = db.Roles.Where(r => user.Roles.Contains(r.RoleId));
Cela le transforme en "SELECT WHERE IN (x, y, z ...)" en SQL.
Vous ne pouvez pas combiner une liste locale avec des données distantes, alors il n'y a rien pour la base de données à lire car les données sont ailleurs (sur votre client).
Je pense qu'il pourrait y avoir une meilleure solution à ce que vous essayez de faire;
Il semble que vous essayez de récupérer tous les rôles attribués à un utilisateur spécifique. Si tel est le cas, je suggère une solution dans laquelle vous transmettez l'ID utilisateur actuel à la base de données et récupérez les rôles attribués avec une INNER JOIN.
Selon votre base de données, cela pourrait ressembler à ceci (si vous connectez des utilisateurs avec des rôles via une table appelée 'UserRoles')
var roles = db.UserRoles.Where(x => x.UserID == <insert id>).Select(x => x.Role)
(Bien sûr, vous pouvez également créer une procédure stockée renvoyant une liste de "rôles" si vous le souhaitez directement dans votre base de données et la mapper.)