2010-11-09 20 views
11

uso de LINQ para crear mi cláusula where de este modo:LINQ DONDE con OR

var query = from x in context.Xs 
      select x; 

if (y == ...) 
{ 
    query = query.Where(x => x.Y == 1); 
} 

tengo montón de estos "si .... donde" declaraciones. El problema que tengo es que todos esos elementos se unen en las cláusulas que usan AND pero necesito todas mis cláusulas WH para usar. ¿Hay alguna manera fácil de transferir este código al código OR? ¿O incluso cuál es la forma más fácil de hacer esto con O?

Gracias.

+2

Posible duplicado de [LINQ: “O” ¿Dónde equivalente de()] (http://stackoverflow.com/questions/2101540/linq-or-equivalent- de dónde). – rsenna

Respuesta

7

PredicateBuilder es la solución perfecta para su problema. Le permite seguir agregando declaraciones "Y" individuales, así como "OR" juntas.

+0

Tuve que copiar la clase desde el enlace proporcionado en mi proyecto y usar predicate.Compile() en la instrucción where. –

8

Se podría hacer algo como:

var query = from x in context.Xs 
     where 
      (x.X == 1) || 
      (x.Y == 2) || 
      (x.Z == "3") 
     select x;