essayer de lire une classe DataContext comme celle-ci de sorte que la question est de savoir où la clause que j'ai besoin d'obtenir des utilisateurs qui sont en rôle (1,2) && isvalid == vrai, si isvalid est 'null' le rendre faux.
Merci p> p>
3 Réponses :
Vous pouvez essayer comme ça. ou P> foreach (var user in dataContext.Users
.Where(u => roles.Contains(u.RoleID.Value)
&& (u.isValid.HasValue && u.isValid))) //you can use HasValue to check for null
Merci @ sudhansu63, mais je ne veux pas filtrer où u.isvalid == null. Je veux obtenir des enregistrements où u.isvalid == true et si u.isvalid est null, (pour éviter de compiler une erreur, convertir ceci en null en faux)
mais ne renvoyez que des enregistrements où u.isvalid == true
J'ai mis à jour ma réponse (2ème One). 1stone travaillait déjà comme prévu.
Merci, qu'est-ce que cela signifie dans votre 1ère réponse (u.isvalid? je veux
opérateur null-coalescent. Il renvoie l'opérande de gauche si l'opérande n'est pas nul; Sinon, il retourne l'opérande à droite.
@sky: Non, cela ne signifie pas rechercher les utilisateurs où u.isvalid code> est faux. Tout comme si (u.isvalid) code> recherche des utilisateurs où u.isvalid code> est vrai, si (u.isvalid ?? false) code> signifie " Rechercher des utilisateurs où u.isvalid code> est vrai (et traitez NULL de la même manière que false) "C'est tout le ?? code> fait, il fournit une instruction pour traiter NULL le même que une autre valeur. Cela n'inversion pas la signification globale d'une condition de filtrage.
Vous devez l'envelopper entre parenthèses: peu de confus avec (u.isvalid ?? faux), n'est-ce pas que si
u.isvalid == null puis faites-la fausse et cherche des utilisateurs où
u.isvalid est faux, ce n'est pas ce que je veux. P>
blockquote> non, cela signifie simplement que ou plus simple en utilisant le
nulls code> est traité comme false code> et que tous les utilisateurs sont pris quel isvalid code> n'est ni null code> ni false code>. Cela fonctionne car le ?? code> -OPérateur convertit le nullable bool code>, vous pouvez donc l'utiliser avec && . Je n'aime pas cela, je préfère le code explicite que je comprends plus tard: p> == code> -opérateur avec le BOOL? CODE>: P> roles.Contains(u.RoleID.Value) && u.isValid == true
Mais perdre le == true code>
Merci tim. Cela signifie filtrer si u.isvalid == true et si u.isvalid est null filtre u.isvalid == faux. Est-ce exact?
Si cela est correct, je ne veux pas ce comportement, je veux revenir seulement si Isvalid == True. Étant donné que Isvalid est nullable, je voulais le rendre faux d'éviter les erreurs et ne renvoie que des enregistrements où Isvalid est vrai.
Un peu de confus avec (u.isvalid?
donné note - bool code> sur false code> de toute façon que vous pouvez utiliser getvalueordfault getvalueordfault code> n'apparaît pas être pris en charge par ef - Voir ticket em> p> p> p>
Ceci est particulièrement agréable, car getvalueordfault () code> est un champ nu en lecture sans logique supplémentaire.
getvalueordfault () code> n'est pas traduit en SQL par l'entitéFramework
@Alexg qui était le seul doute dans mon esprit - pouvez-vous confirmer que c'est certainement le cas?
@Alexg Merci, cependant, la question elle-même est plus liée à l'erreur du compilateur plutôt qu'à l'exécution que celle qui serait lancée par EF (bien que, finalement, cela soit le cas si l'OP utilise ce code). Je laisserai la réponse, mais mettez à jour simplement pour souligner que le soutien semble toujours manquer à EF (bien que je pense que cela est i> soutenu par L2S).
Vous devez supprimer la possibilité d'une nulle de chaque côté de l'opérande, que vous le faites en l'enveloppant entre parenthèses ou par une autre méthode ->. Où (u => rôles.Contains (u.roléid.value) && u. isvalid == True) devrait également fonctionner.