2012-09-09 22 views
6

Hola alguna sugerencia sobre la construcción de una declaración de LINQ sobre la base de criterios de búsqueda?condicional en LINQ DONDE

voy a estar pasando en una instancia de una clase 'searchCriteria' con todos los parámetros con valores nulos.

que luego quieren

if (sc.a != null) 
    // add to where 

if (sc.b != null) 
    // add to where 

La clave es que son no ser RUP operación lógica combina.

Algún consejo?

Y para los puntos de bonificación que me gustaría utilizar 'contiene' en un int? pero solo puedo obtener iguales o no iguales.

+0

"o" es difícil de combinar; hacer correctamente eso implica árboles de expresión y a menudo un visitante/redactor. ¿Cuántas variables tienes? ¿Solo los dos? Si es así, francamente, hágalo de forma exhaustiva (es decir, 3 líneas regulares diferentes: una X, una Y, una X || Y) –

+0

¿Qué ORM? LINQ to SQL o Entities Framework? – abatishchev

+0

será potencialmente una docena de parámetros ... y estoy usando EF .... –

Respuesta

4

Probar:

.Where(x => 
    (x.a != null ? x.a == a : false) && 
    (x.b != null ? x.b == b : false)); 

o

.Where(x => 
    (x.a != null && x.a == a) || 
    (x.b != null && x.b == b)); 

también:

.Where(x => new int[] { 1, 2, 3 }.Contains(x.i)); 
+0

&& debe ser || ? –

+0

@Marc: O 'falso' en la mano derecha del operador'?: '. ¿Correcto? – abatishchev

+0

Esta parece ser una solución limpia y elegante ... Veré qué tan bien se escala. Re la segunda parte. Lo que tengo es un ID de pedido int de 12345 Quiero poder buscar 123 y encontrar 123 * con cadenas que puede hacer.Contiene pero no puede con ints? ¿Se puede hacer esto para que funcione? –