2012-02-17 4 views
1

Je suis en train de construire une recherche qui nécessite l'utilisation de prédicats. Cependant, chaque fois que je lance la requête ci-dessous, je continue d'obtenir seulement les résultats du dernier prédicat. Les résultats du premier ne sont pas inclus. Basé sur ma requête ci-dessous peut-on me pointer dans la bonne direction.Entity Framework utilisant des prédicats

var _predicate = PredicateBuilder.False<TBLDESIGN>(); 

_predicate = _predicate.Or(a => (a.KEYWORDS.Contains('red') || a.NAME.Contains('red'))); 

_predicate = _predicate.Or(a => (a.KEYWORDS.Contains('blue') || a.NAME.Contains('blue'))); 


       var results = dbContext.TBLDESIGN 
          .Include(s => s.TBLCOLLECTION) 
          .Include(s => s.LKPRICE) 
          .Include(s => s.TBLDESIGNER) 
          .AsExpandable().Where(_predicate) 
          .OrderByDescending(s => s.DATE_APPROVED) 
          .Select(s => new 
          { 
           s.ACTIVE, 
           s.DATE_CREATED, 
           s.EXPORTED, 
           s.IMAGE_PATH, 
           DesignId = s.ID, 
           s.IS_APPROVED, 
           s.TBLDESIGNER.FIRST_NAME, 
           s.TBLDESIGNER.LAST_NAME, 
           s.TBLDESIGNER.ALIAS, 
           s.NAME, 
           s.LKPRICE.PRICE, 
           s.COMPLETED, 
           s.DATE_APPROVED, 
           DesignerId = s.TBLDESIGNER.ID, 
           s.VIEW_COUNT 
          }).ToList(); 

Cette requête est censé retirer les dessins qui ont un mot-clé contenant du rouge ou le nom contenant du rouge ou un mot clé contenant du bleu ou le nom contenant du bleu.

Actuellement, dans ce scénario, il ignore le premier prédicat et renvoie simplement les valeurs bleues.

Merci pour votre aide, Billy

Répondre

1

Peut-être la solution isnt, mais avez-vous essayé de diviser les prédicats comme suit

var _predicate = PredicateBuilder.False<TBLDESIGN>(); 

_predicate = _predicate.Or(a => a.KEYWORDS.Contains('red')); 
_predicate = _predicate.Or(a => a.NAME.Contains('red'))); 
_predicate = _predicate.Or(a => a.KEYWORDS.Contains('blue')); 
_predicate = _predicate.Or(a => a.NAME.Contains('blue'))); 
+0

pas, j'ai essayé quelques variations, mais pas étaler. Je vais essayer et vous le faire savoir. Merci pour la réponse. –

+0

Cela semble me déplacer plus loin dans la bonne direction, mais pour une raison quelconque, si les mots-clés sont vides et que le nom contient toujours «rouge», cet enregistrement n'est pas retourné? –

+0

Ne tenez pas compte du dernier commentaire .. –

Questions connexes