2012-02-17 87 views
1

我正在構建一個需要使用謂詞的搜索過程。然而,每當我運行下面的查詢,我仍然只獲得最後一個謂詞的結果。第一個的結果不包括在內。基於我的查詢下面,任何人都可以指向正確的方向。使用謂詞的實體框架

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的解決方案,但你試過如下分割謂詞

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

沒有,我已經嘗試了一些變化,但不是擴散;傳播開。我會給它一個鏡頭,讓你知道。謝謝回覆。 – 2012-02-17 15:34:56

+0

這似乎讓我進一步朝着正確的方向前進,但無論出於何種原因,如果關鍵字爲空且名稱仍包含「紅色」,則記錄不會返回? – 2012-02-17 16:42:54

+0

不顧最後的評論.. – 2012-02-17 16:50:52