2012-02-17 77 views
3

在所有我見過的關於謂詞構建器的例子中,如果您正在構建「和」表達式條件,並且如果構建「或」表達式條件,則會顯示一個包含PredicateBuilder.True的起始表達式。PredicateBuilder和或或者

我的問題是,情況總是如此,如果是的話,爲什麼不能簡單地推斷。我懷疑你一定是在建立一個「和」的表達,並且希望從一個錯誤開始。 「或」的相反

任何人都可以向我解釋這一點嗎?

回答

7

在表達式A和B以及C和D中,如果任何條件(A,B,C或D)都是False,則整個表達式爲False。所以如果你用False開始一個「和」表達式,無論你和它是什麼,整個表達式都是False。

與「或」表達式相同。在表達式A或B或C或D中,如果任何條件(A,B,C或D)爲真,則整個表達式爲True。所以,如果你用True開始一個「或」表達式,不管你對它做了什麼,整個表達式都是真的。至於爲什麼你需要用字面True或False來啓動一個PredicateBuilder,我相信這只是一個簡單的使用PredicateBuilder的約定。你的表達式總是以(布爾)條件開始,後面跟着0或更多的「和/或條件」部分。所以你可以有「A」,或者「A和B」,或者「A和B和C」。你永遠不會以「和A」開頭。 PredicateBuilder的.And(條件)將「和條件」添加到表達式中,所以你不能從它開始。可能有一個構造函數讓你創建你的表達式,並以一個初始條件開始它(新的表達式< ...>(A)?我沒有實際檢查...是否有一個?),但是你會必須以不同的方式(調用構造函數)處理第一個條件(您可能循環了一些事物集合並添加到表達式),而不是第二個和後續條件(調用.And(...)或.Or( ...))。 PredicateBuilder的.True < ...>()和.False < ...>()方法處理創建Expression以及添加第一個(通用)條件,以便您可以處理將第一個和所有後續條件添加到您的循環相同(通過調用.And(...)或.Or(...))。