Quel est l’équivalent linq de l’opérateur SQL IN?

Avec linq je dois vérifier si une valeur d’une ligne est présente dans un tableau.
L’équivalent de la requête SQL:

WHERE ID IN (2,3,4,5) 

Comment puis-je faire?

.Contains

 var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x 

Bien sûr, avec votre simple problème, vous pourriez avoir quelque chose comme:

 var resultset = from x in collection where x >= 2 && x <= 5 select x 

Effectuez l’équivalent d’un SQL IN avec IEnumerable.Contains () .

 var idlist = new int[] { 2, 3, 4, 5 }; var result = from x in source where idlist.Contains(x.Id) select x; 
 db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x)); 

ou

 from x in db.SomeTable where new[] {2,3,4,5}.Contains(x) 

Intersect et Except sont un peu plus concis et seront probablement un peu plus rapides.

DANS

 collection.Intersect(new[] {2,3,4,5}); 

PAS DEDANS

 collection.Except(new[] {2,3,4,5}); 

ou

Méthode de syntaxe pour IN

 collection.Where(x => new[] {2,3,4,5}.Contains(x)); 

et pas dans

 collection.Where(x => !(new[] {2,3,4,5}.Contains(x))); 

Une déclaration IEnumerable.Contains(T) devrait faire ce que vous recherchez.

Un exemple très basique utilisant .Contains ()

 List list = new List(); for (int k = 1; k < 10; k++) { list.Add(k); } int[] conditionList = new int[]{2,3,4}; var a = (from test in list where conditionList.Contains(test) select test); 

Vous pouvez écrire la méthode d’aide:

  public bool Contains(int x, params int[] set) { return set.Contains(x); } 

et utiliser un code court:

  var resultset = from x in collection where Contains(x, 2, 3, 4, 5) select x; 

Voici une méthode d’extension générique qui peut être utilisée pour rechercher une valeur dans une liste de valeurs:

  public static bool In(this T searchValue, params T[] valuesToSearch) { if (valuesToSearch == null) return false; for (int i = 0; i < valuesToSearch.Length; i++) if (searchValue.Equals(valuesToSearch[i])) return true; return false; } 

Cela peut être utilisé comme:

 int i = 5; i.In(45, 44, 5, 234); // Returns true ssortingng s = "test"; s.In("aa", "b", "c"); // Returns false 

Ceci est pratique dans les instructions conditionnelles.