【问题标题】:SQL to choose filters with OR in between C#SQL 在 C# 之间选择带有 OR 的过滤器
【发布时间】:2021-05-20 19:13:15
【问题描述】:

我有一个窗口应用程序,将列的一些值显示为复选框, 例如:列名“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 列中选择“是”。

【问题讨论】:

  • 首先正常地重写这个查询,使用参数并且没有所有的连接。您可能会发现它更容易,并且可能还会在 Stack Overflow 上获得更多帮助
  • 借助类似 LINQ 的 ORM,可以轻松完成根据条件的查询组合。可以用吗?
  • 我会努力的,继续努力

标签: c# sql asp.net


【解决方案1】:

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

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);

【讨论】:

    猜你喜欢
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-16
    • 2018-03-23
    • 1970-01-01
    相关资源
    最近更新 更多