我使用標準訪問者模式來遍歷LINQ表達式樹,以便生成動態SQL WHERE子句。如何評估LINQ表達式樹中的獨立布爾表達式
我的問題是,不像C#,你不能在SQL中使用獨立的布爾表達式;你必須把它比作1或0。
鑑於這種假設的lambda表達式:
h => h.Enabled || h.Enabled == false
這將是很容易誤生成驗證碼:
WHERE Enabled OR Enabled = 0
或驗證碼:
WHERE (Enabled = 1) OR (Enabled = 1) = 0
兩者當然會產生一個SQL錯誤。我應該運用什麼邏輯來解決這個問題,因爲我深入研究子樹以找出這種情況可能會導致我的代碼開始顯得非常呆滯。
編輯:上面的例子當然是多餘的 - 我只用它來說明一個觀點。能夠創造這種情況下
例子:
h => h.Enabled
h => h.Enabled == enabled
h => h.Enabled == true
當然是最後一個例子是作風不好,但我的代碼被設計成獨立工作的程序員的技能水平,所以不應付多餘的場景會對我而言,表現形式很差。
嗨 我想達到同樣的效果。你能幫我理解嗎?例如,如果在一個表達式中,我有兩個不同的布爾表達式x => x.IsBool || x.IsBool == tue。如果我訪問他們的MemberExpressions,我得到這個代碼'WHERE IsBool = 1或IsBool = 1 =',這顯然已被破壞。如何區分一個元素表達式和另一個元素是否明確? – DolceVita 2016-06-09 22:08:36