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:Quel est l'équivalent linq de l'opérateur SQL IN
WHERE ID IN (2,3,4,5)
Comment puis-je faire?
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:Quel est l'équivalent linq de l'opérateur SQL IN
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 problème simple, vous pourriez avoir quelque chose comme:
var resultset = from x in collection where x >= 2 && x <= 5 select x
Je reçois l'erreur: 'int [] ne contient pas de définition de contains'. – nam
Une déclaration IEnumerable<T>.Contains(T)
devrait faire ce que vous cherchez.
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)
Perform 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;
Un exemple très basique à l'aide .Contains()
List<int> list = new List<int>();
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 nettoyer cela beaucoup en changeant votre boucle 'for' à' IEnumerable
Point pris. +1 Mais pour être juste, j'écrivais juste du code que je savais capable de travailler sans avoir besoin de le tester :) – Kamal
Vous pouvez écrire l'aide-méthode:
public bool Contains(int x, params int[] set) {
return set.Contains(x);
}
et utilisez le code court:
var resultset = from x in collection
where Contains(x, 2, 3, 4, 5)
select x;
Intersection et Sauf sont un peu plus concis et seront probables y être un peu plus rapide aussi.
IN
collection.Intersect(new[] {2,3,4,5});
NOT IN
collection.Except(new[] {2,3,4,5});
ou
syntaxe Procédé pour IN
collection.Where(x => new[] {2,3,4,5}.Contains(x));
et NOT IN
collection.Where(x => !(new[] {2,3,4,5}.Contains(x)));
Voici une méthode d'extension générique qui peut être utilisé pour rechercher une valeur dans une liste de valeurs:
public static bool In<T>(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
string s = "test";
s.In("aa", "b", "c"); // Returns false
Ceci est pratique dans conditionnelle déclarations.
[Requêtes SQL dans LINQ] (http://www.codeducky.org/sql-queries-in-linq/#where-in) fournit des traductions des opérations SQL courantes, notamment «WHERE IN» à LINQ. –