只需在后面附加两行。
string Query="SELECT * FROM Table1 WHERE 1=1 ";
if (condition1) Query+="AND Col1=0 ";
if (condition2) Query+="AND Col2=1 ";
if (condition3) Query+="AND Col3=2 ";
Query.Replace("1=1 AND ", "");
Query.Replace(" WHERE 1=1 ", "");
例如
SELECT * FROM Table1 WHERE 1=1 AND Col1=0 AND Col2=1 AND Col3=2
会变成
SELECT * FROM Table1 WHERE Col1=0 AND Col2=1 AND Col3=2
尽管
SELECT * FROM Table1 WHERE 1=1
会变成
SELECT * FROM Table1
======================================
感谢您指出此解决方案的缺陷:
“如果出于任何原因,其中一个条件包含文本“1=1 AND”或“WHERE 1=1”,这可能会中断查询。如果条件包含子查询或尝试检查是否有例如,列包含此文本。也许这对您来说不是问题,但您应该牢记......“
为了摆脱这个问题,我们需要区分“main” WHERE 1=1和那些来自子查询的,这很容易:
只需使“主要” WHERE特殊:我会附加一个“$”符号
string Query="SELECT * FROM Table1 WHERE$ 1=1 ";
if (condition1) Query+="AND Col1=0 ";
if (condition2) Query+="AND Col2=1 ";
if (condition3) Query+="AND Col3=2 ";
然后仍然附加两行:
Query.Replace("WHERE$ 1=1 AND ", "WHERE ");
Query.Replace(" WHERE$ 1=1 ", "");