Con linq tengo que verificar si un valor de una fila está presente en una matriz.
El equivalente de la consulta SQL:Cuál es el linq equivalente al operador SQL IN
WHERE ID IN (2,3,4,5)
¿Cómo puedo hacer?
Con linq tengo que verificar si un valor de una fila está presente en una matriz.
El equivalente de la consulta SQL:Cuál es el linq equivalente al operador SQL IN
WHERE ID IN (2,3,4,5)
¿Cómo puedo hacer?
.Contains
var resultset = from x in collection where new[] {2,3,4,5}.Contains(x) select x
Por supuesto, con su sencillo problema, que podría tener algo como:
var resultset = from x in collection where x >= 2 && x <= 5 select x
Recibo el error: 'int [] no contiene una definición de contains'. – nam
Una declaración IEnumerable<T>.Contains(T)
debe hacer lo que usted está buscando.
db.SomeTable.Where(x => new[] {2,3,4,5}.Contains(x));
o
from x in db.SomeTable
where new[] {2,3,4,5}.Contains(x)
realizar el equivalente de un SQL IN con IEnumerable.Contains().
var idlist = new int[] { 2, 3, 4, 5 };
var result = from x in source
where idlist.Contains(x.Id)
select x;
Un ejemplo muy básico utilizando .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);
Puede limpiar esto mucho cambiando su ciclo 'for' por' IEnumerable
Punto tomado. +1 Pero para ser justos, solo estaba escribiendo un código que sabía que funcionaría sin necesidad de probarlo :) – Kamal
Puede escribir ayuda método:
public bool Contains(int x, params int[] set) {
return set.Contains(x);
}
y utilizar el código corto:
var resultset = from x in collection
where Contains(x, 2, 3, 4, 5)
select x;
Intersección y excepto que son un poco más concisos y probablemente y sea un poco más rápido también
EN
collection.Intersect(new[] {2,3,4,5});
NO
EN
collection.Except(new[] {2,3,4,5});
o
sintaxis Método para IN
collection.Where(x => new[] {2,3,4,5}.Contains(x));
y no en
collection.Where(x => !(new[] {2,3,4,5}.Contains(x)));
A continuación se presenta un método de extensión genérica que se puede utilizar para buscar un valor dentro de una lista de valores:
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;
}
Esto se puede utilizar como:
int i = 5;
i.In(45, 44, 5, 234); // Returns true
string s = "test";
s.In("aa", "b", "c"); // Returns false
Esto es útil en condicional declaraciones.
[Consultas SQL en LINQ] (http://www.codeducky.org/sql-queries-in-linq/#where-in) proporciona traducciones de operaciones SQL comunes, incluyendo 'WHERE IN' a LINQ. –