LINQ (to SQL) può eseguire query bit a bit?
-
02-07-2019 - |
Domanda
Ho una tabella di utenti che include una maschera di bit di ruoli a cui l'utente appartiene. Vorrei selezionare gli utenti che appartengono a uno o più ruoli in un valore maschera di bit. Ad esempio:
select * from [User] where UserRolesBitmask | 22 = 22
Seleziona tutti gli utenti che hanno i ruoli '2', '4' o '16' nella loro maschera di bit. È possibile esprimerlo in una query LINQ? Grazie.
Soluzione
Penso che funzionerà, ma non l'ho provato. Sostituisci il nome del tuo oggetto DataContext. YMMV.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Altri suggerimenti
Come nota a margine, però, per i miei compagni googler:
UserRolesBitmask | 22 == 22
seleziona tutti gli utenti che non hanno altri flag (non è un filtro, è come dire 1 == 1
).
Quello che vuoi è:
-
UserRolesBitmask & amp; 22 == 22
che seleziona gli utenti che hanno tutti i ruoli nella loro maschera di bit o: -
UserRolesBitmask & amp; 22! = 0
che seleziona gli utenti che hanno almeno uno dei ruoli nella loro maschera di bit
Se non funziona, puoi sempre usare ExecuteCommand
:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow