Dynamic où clause (OR) dans Linq aux entités
Dans le post ici j'ai appris à construire une dynamique de requêtes à l'aide de l'exécution différée de Linq. Mais la requête est en fait à l'aide d'un ET concaténation de la condition where.
Comment puis-je obtenir la même requête, mais avec un OU logique?
En raison de l'Drapeaux enum, la requête doit rechercher nom d'utilisateurWindowsUsername ou les deux:
public User GetUser(IdentifierType type, string identifier)
{
using (var context = contextFactory.Invoke())
{
var query = from u in context.Users select u;
if (type.HasFlag(IdentifierType.Username))
query = query.Where(u => u.Username == identifier);
if (type.HasFlag(IdentifierType.Windows))
query = query.Where(u => u.WindowsUsername == identifier);
return query.FirstOrDefault();
}
}
source d'informationauteur Thomas Zweifel
Vous devez vous connecter pour publier un commentaire.
Avec LINQKit de l' PredicateBuilder vous pouvez construire des prédicats de manière dynamique.
C'est ce que le
Expand
est pour:Ou: sans elle, une expression est
Invoke
d, ce qui provoque une exception dans l'EF:Plus tard plus:
Il est un autre prédicat constructeur qui fait la même chose mais sans Développer: http://petemontgomery.wordpress.com/2011/02/10/a-universal-predicatebuilder/
Cela devrait aider..
Contient la Requête sur plusieurs colonnes
Il semble également qu'il y est un problème fondamental dans la conception de la table (s'il vous Plaît corrigez-moi si je me trompe). Quel est le but de la IdentifierType dans votre base de données?