Kann LINQ (to SQL) tun bitweise Abfragen?
-
02-07-2019 - |
Frage
Ich habe eine Tabelle von Benutzern, die eine Bitmaske von Rollen enthalten, die der Benutzer gehört. Ich möchte Benutzer auswählen, die in einem Bitmaskenwert auf eine oder mehrere der Rollen gehören. Zum Beispiel:
select * from [User] where UserRolesBitmask | 22 = 22
Damit werden alle Benutzer, die die Rollen ‚2‘, ‚4‘ oder ‚16‘ in ihre bitmask haben. Ist dies möglich, dies in einer LINQ-Abfrage auszudrücken? Danke.
Lösung
Ich denke, das wird funktionieren, aber ich habe it.Substitute den Namen Ihres Datacontext-Objekt nicht getestet. YMMV.
from u in DataContext.Users
where UserRolesBitmask | 22 == 22
select u
Andere Tipps
Als Randbemerkung obwohl für meine Kolleginnen und Googler:
UserRolesBitmask | 22 == 22
wählt alle Benutzer, die haben keine andere Flaggen (seinen nicht einen Filter, der wie wenn man sagt 1==1
).
Was Sie wollen, ist entweder:
-
UserRolesBitmask & 22 == 22
die Benutzer auswählt, die alle Rollen in ihren bitmask oder: -
UserRolesBitmask & 22 != 0
die Benutzer, die mindestens eine der Rollen in ihrer bitmask haben wählt
Wenn das nicht funktioniert, Sie immer ExecuteCommand
verwenden:
DataContext.ExecuteCommand("select * from [User] where UserRolesBitmask | {0} = {0}", 22);