SQL “pas dans” la syntaxe pour Entity Framework 4.1
J'ai une question simple, avec Entity Framework, la syntaxe pour le "pas dans" SQL équivalent. Essentiellement, je veux convertir la syntaxe SQL suivante dans le Cadre de l'Entité syntaxe:
select ID
from dbo.List
where ID not in (list of IDs)
Voici une méthode que j'utilise pour la recherche d'un enregistrement unique:
public static List GetLists(int id)
{
using (dbInstance db = new dbInstance())
{
return db.Lists.Where(m => m.ID == id);
}
}
Ici est un pseudo-méthode que je veux utiliser pour cela:
public static List<List> GetLists(List<int> listIDs)
{
using (dbInstance db = new dbInstance())
{
return db.Lists.Where(**** What Goes Here ****).ToList();
}
}
Quelqu'un peut-il me donner des indications sur ce qui se passe dans le Where
de la clause de la zone? J'ai lu quelques forums à ce sujet et a vu la mention de l'aide de .Contains()
ou .Any()
, mais aucun de ces exemples ont été suffisamment rapprochée pour ajustement.
- +1 Très sympa, bien rédigé question pour être votre premier posée ici sur un Débordement de Pile. Bienvenue.
Vous devez vous connecter pour publier un commentaire.
Donnez ce un aller...
Ces va se transformer en approximativement à la suite de requêtes de base de données:
ou
respectivement.
Ce un vous oblige à penser en arrière un peu. Au lieu de se demander si la valeur est non pas dans une liste d'identifiants, vous devez demander à certains de la liste des id ne contient pas la valeur. Comme ce
Essayez ceci pour commencer ...
Ce pourrait être une manière de faire ce que vous voulez:
Cependant j'ai trouvé que cela pourrait soulever d'erreur sur certains scénarios, en particulier lorsque la liste est trop grande et la connexion est un peu lente.
N'oubliez pas de vérifier tout le reste AVANT que ce filtre peut avoir moins de valeurs à vérifier.
Rappelez-vous aussi que Linq ne pas remplir la variable lors de la génération du filtre/de la requête (au moins pas par défaut). Si vous allez effectuer une itération pour chaque enregistrement, n'oubliez pas d'appeler un ToList() ou la méthode ToArray() avant, à moins que chaque enregistrement a 500 mo ou plus...