2012-02-17 6 views
1

私は述語の使用を必要とする検索を構築中です。しかし、私は以下のクエリを実行するたびに、私は最後の述語の結果だけを取得し続けます。最初の結果は含まれていません。以下の質問に基づいて、誰でも私を正しい方向に向けることができます。述語を使用するEntity Framework

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(); 

このクエリは、赤や青や青を含む名前を含むキーワードを含む赤や名前を含むキーワードを持っている任意のデザインを引き戻すことになっています。

現在、このシナリオでは、最初の述語は無視され、青の値が返されます。あなたの助け、 ビリー

答えて

1

ため

おかげで多分これは解決策をisn'tていますが、次のように述語を分割しようとしたん

+0

はいいえ、私はいくつかのバリエーションではなく、それを試してみました

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

これは正しい方向に私をさらに動かすように見えますが、何らかの理由でキーワードが空で、名前にまだ「赤」が含まれていればそのレコードは返されませんか? –

+0

最後のコメントを無視してください。 –

関連する問題