C# SQL选择带C或介于C和C之间的筛选器#

C# SQL选择带C或介于C和C之间的筛选器#,c#,sql,asp.net,C#,Sql,Asp.net,我有一个窗口应用程序,它显示一些列的值作为复选框, 例如:列名“DD_14:你找工作了吗?”所以回答“是”和“否”作为复选框 我想看到的是从DD_14中选择“是”或从另一列中选择“否”的案例的分布情况,例如DD_15 我只需要编辑查询,但它是这样写的: string sql_filter_part1 = ""; if (cb_DD_14_A_DESC_Yes.Checked) { sql_filter_part1 = sql_filter_part1 + "

我有一个窗口应用程序,它显示一些列的值作为复选框, 例如:列名“DD_14:你找工作了吗?”所以回答“是”和“否”作为复选框

我想看到的是从DD_14中选择“是”或从另一列中选择“否”的案例的分布情况,例如DD_15

我只需要编辑查询,但它是这样写的:

string sql_filter_part1 = "";
if (cb_DD_14_A_DESC_Yes.Checked)
{
    sql_filter_part1 = sql_filter_part1 + " " + @"""DD_14_A_SEQ_NO""::int=1 ";
}
if (cb_DD_14_A_DESC_No.Checked)
{
    sql_filter_part1 = sql_filter_part1 + " " + @"""DD_14_A_SEQ_NO""::int=2 ";
}
if (cb_DD_14_A_DESC_NotSelected.Checked)
{
    sql_filter_part1 = sql_filter_part1 + " " + @"""DD_14_A_SEQ_NO"" is null ";
}

if (sql_filter_part1.Length > 0)
{
    sql_filter_part1 = sql_filter_part1.Trim();
    sql_filter_part1 = sql_filter_part1.Replace("  ", " or ");
    sql_filter_part1 = "(" + sql_filter_part1 + ")";
}
及其他专栏:

string sql_filter_part2 = "";
if (cb_DD_14_B_DESC_1.Checked)
{
    sql_filter_part2 = sql_filter_part2 + " " + @"""DD_14_B_SEQ_NO""::int=1 ";
}
if (cb_DD_14_B_DESC_2.Checked)
{
    sql_filter_part2 = sql_filter_part2 + " " + @"""DD_14_B_SEQ_NO""::int=2 ";
}
if (cb_DD_14_B_DESC_3.Checked)
{
    sql_filter_part2 = sql_filter_part2 + " " + @"""DD_14_B_SEQ_NO""::int=3 ";
}
if (cb_DD_14_B_DESC_4.Checked)
{
    sql_filter_part2 = sql_filter_part2 + " " + @"""DD_14_B_SEQ_NO""::int=4 ";
}
if (cb_DD_14_B_DESC_NotSelected.Checked)
{
    sql_filter_part2 = sql_filter_part2 + " " + @"""DD_14_B_SEQ_NO"" is null ";
}
if (sql_filter_part2.Length > 0)
{
    sql_filter_part2 = sql_filter_part2.Trim();
    sql_filter_part2 = sql_filter_part2.Replace("  ", " or ");
    sql_filter_part2 = "(" + sql_filter_part2 + ")";
}
sql_filter = sql_filter_part1 + " " + sql_filter_part2 + " " + sql_filter_part3 + " " + sql_filter_part4 + " " + sql_filter_part5;
并将它们保存到类中,选中该复选框后,该类将在过程中运行


所以重点是我想看看过滤器是用户在第1列中选择“是”还是在第2列中选择“是”。

使用面向对象的原则,您可以(也应该)做很多事情来清理代码,减少代码的重复性和易出错性。但我认为这样的事情是可行的:

var parts = new[] 
  {
    sql_filter_part1,
    sql_filter_part2,
    sql_filter_part3,
    sql_filter_part4,
    sql_filter_part5
  };
var activeParts = parts.Where(p => !string.IsNullOrWhitespace(p));
sql_filter = string.Join(" or ", activeParts);

首先,使用参数并在不进行所有连接的情况下,正常重写此查询。您可能会发现它更容易,并且可能会在其他方面获得更多帮助。使用类似LINQ的ORM,可以轻松地根据条件进行查询组合。你能用点吗?我会试试的,用一下