2010-11-09 6 views
11

J'utilise LINQ pour créer ma clause where comme ceci:LINQ OÙ avec OU

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

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

Je bande de ces "si .... où" déclarations. Le problème que j'ai est que tous ces wheres rejoignent les clauses where en utilisant AND mais j'ai besoin de toutes mes clauses where pour utiliser OR. Y at-il un moyen facile de porter ce code dans le code OU? Ou même, quel est le moyen le plus facile de le faire avec OR?

Merci.

+2

double possible de [Linq: « Ou » équivalent de cas()] (http://stackoverflow.com/questions/2101540/linq-or-equivalent- d'ou). – rsenna

Répondre

7

PredicateBuilder est la solution parfaite pour votre problème. Il vous permet de continuer à ajouter des instructions individuelles "ET" et "OU" ensemble.

+0

J'ai dû copier la classe à partir du lien fourni dans mon projet et utiliser predicate.Compile() dans l'instruction where. –

8

Vous pouvez faire quelque chose comme:

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