c# - SQL 在 C# 之间选择带有 OR 的过滤器
问题描述
我有一个窗口应用程序,将列的一些值显示为复选框,例如:列名“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);
推荐阅读
- node.js - 无法找到 ionic v4 的 ng 命令,但在使用 ionic v6 时可以
- angular - 如何将 jsp 字符串传递给角度输入参数?
- database - 是否有现成的模板包含 Visio 中的 Is-A 关系(idef1x 表示法)?
- azure - Azure Blob 授权标头 | HMAC-SHA256 | OpenSSL、cURL 与 Java | 签名不匹配
- xamarin.forms - Xamarin - CachedImage - 访问下载的文件
- javascript - 根据屏幕大小显示/隐藏 div 元素,但允许通过单击按钮来反转
- javascript - 删除每个项目后为值显示 null
- laravel - Spatie 查询生成器过滤嵌套关系
- terraform - local-exec 供应商 terraform 中的多个命令
- flutter - 如何在 PageView 中嵌套 ListView