“O” equivalente en Linq Where () expresión lambda

¿Hay algún método en Linq donde pueda usar para construir cadenas de SQL como “… donde (a = 1) OR (a = 2)”?

Ciertamente puede hacerlo dentro de una cláusula Where (método de extensión). Sin embargo, si necesita construir una consulta compleja de forma dinámica, puede usar PredicateBuilder .

  var query = collection.Where( c => cA == 1 || cB == 2 ); 

O usando un PredicateBuilder

  var predicate = PredicateBuilder.False(); predicate = predicate.Or( f => fA == 1 ); if (allowB) { predicate = predicate.Or( f => fB == 1 ); } var query = collection.Where( predicate ); 

Puede usar los operadores booleanos .NET estándar en su única cláusula where:

 MyDataSource.Where(data => data.a == 'a' || data.a == 'b') 

Usas todos los mismos operadores que en C normal ===> || para “o” && para “y”, etc.

 var something = from s in mycollection where s.something == 32 || s.somethingelse == 45 select s 

en su llamada .Where() use el operador Boolean ‘Or’ estándar, || .

 var query = items.Where(item => (item == 1 || item == 2)); 

Todo lo que hace la llamada Where es una comparación booleana sobre cualquier cosa que desee, de modo que puede completarla con la lógica condicional que desee.

Si no conoce el número de parámetros, puede usar esto:

Data de muestra

 var parameters= new List{"a","d"}; var sampledata = new Dictionary(); sampledata["a"] = "A"; sampledata["b"] = "B"; sampledata["c"] = "C"; sampledata["d"] = "D"; 

Código

 var query = sampledata.AsQueryable(); var firstItemKey = sampledata.FirstOrDefault().Key; var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable(); foreach (var parameter in parameters.Skip(1)) { queryresult=queryresult.Concat(query.Where(x => x.Key == parameter)); } var result = queryresult.ToList(); 

Esto está integrado en .net ahora, no estoy seguro de si antes no lo era. Dada una consulta Linq existente, puede agregar una cláusula where que tome una matriz de cadenas (SearchStrings) y verificar si alguna de ellas coincide con el objeto de la colección que está buscando. El uso de ToLower () solo asegura que se evite la distinción entre mayúsculas y minúsculas en las consultas SQL.

 query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower())); 

Puede hacer lo mismo para un predicado ‘y’ al hacer coincidir todas las palabras de la matriz con el objeto de la colección.

 query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower())); 

En este ejemplo, me correlaciona con cada objeto en una colección, ys se correlaciona con cada cadena en la matriz SearchStrings.