動的SQLWHERE句を生成するために、標準のビジターパターンを使用してLINQ式ツリーを反復処理しています。
私の問題は、C#とは異なり、SQLでスタンドアロンのブール式を使用できないことです。1または0と比較する必要があります。
この架空のラムダ式を考えると:
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
当然、その最後の例は貧弱なスタイルですが、私のコードはプログラマーのスキルレベルとは無関係に機能するように設計されているため、冗長なシナリオに対応しないことは私の側では貧弱な形式になります。