LINQ (to SQL) peut-il effectuer des requêtes au niveau des bits?
-
02-07-2019 - |
Question
J'ai un tableau d'utilisateurs qui inclut un masque de bits des rôles auxquels l'utilisateur appartient. J'aimerais sélectionner des utilisateurs appartenant à un ou plusieurs des rôles dans une valeur de masque de bits. Par exemple:
select * from [User] where UserRolesBitmask | 22 = 22
Ceci sélectionne tous les utilisateurs ayant les rôles "2", "4" ou "16" dans leur masque de bits. Est-ce possible d'exprimer cela dans une requête LINQ? Merci.
La solution
Je pense que cela fonctionnera, mais je ne l’ai pas testé. Remplacez le nom de votre objet DataContext. YMMV.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Autres conseils
Comme note pour les autres googleurs:
UserRolesBitmask | 22 == 22
sélectionne tous les utilisateurs qui n'ont pas d'autres indicateurs (ce n'est pas un filtre, c'est comme si on disait 1 == 1
).
Ce que vous voulez, c'est soit:
-
UserRolesBitmask & amp; 22 == 22
qui sélectionne les utilisateurs qui ont tous les rôles dans leur masque de bits ou: -
UserRolesBitmask & amp; 22! = 0
qui sélectionne les utilisateurs qui ont au moins un des rôles dans leur masque de bits
Si cela ne fonctionne pas, vous pouvez toujours utiliser ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);