我在StackOverflow上找到了一大堆关于条件WHERE子句的答案,但是我找不到一个对我的问题有点特殊的答案,所以我只是想寻求一些帮助。。。
我公司的网站包含所有直接写在C#代码中的SQL查询(我不喜欢,但那是另一回事)
表单中有一组复选框(目前有3个选项,但此列表可能会增加)。对于选择的每个“提供者类型”,需要向WHERE子句添加一个附加条件,但我不确定如何最好地处理这个问题。
下面是处理此问题的代码<代码>ProviderTypesCSV最多可包含3个值(0,1,2),具体取决于用户选中的选项数量:
if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
{
// values are in a csv string. Split out the csv
var statuses = searchOptions.ProviderTypesCSV.Split(',');
if (statuses.Contains("0")) //Hospitals & Facilities
{
strSQL += " AND (<<perform query for 'Hospitals & Facilities'>>)";
}
if (statuses.Contains("1")) //Physicians and Practitioners
{
strSQL += " AND (<<perform query for 'Physcians and Practitioners'>>)";
}
if (statuses.Contains("2")) //In-Person Visit Providers
{
strSQL += " AND (<<perform query for 'In-Person Visit Providers'>>)";
}
}
当前的问题显然是,当选择多个选项时,上面的查询没有考虑在内。当选择多个选项时,条件运算符需要是“或”,而不是“和”,但我不知道如何最好地设置它而不造成混乱
只是好奇最好的设置方式。
您可以定义一个字符串列表并添加您的条件,然后用一个"OR"
分隔符调整每个元素,并将其用于您的AND
if (!String.IsNullOrEmpty(searchOptions.ProviderTypesCSV))
{
//values are in a csv string. Split out the csv
var statuses = searchOptions.ProviderTypesCSV.Split(',');
List<string> conditions = new List<string>();
if (statuses.Contains("0")) //Hospitals & Facilities
{
conditions.Add("(<<perform query for 'Hospitals & Facilities'>>)");
}
if (statuses.Contains("1")) //Physicians and Practitioners
{
sconditions.Add("(<<perform query for 'Physcians and Practitioners'>>)");
}
if (statuses.Contains("2")) //In-Person Visit Providers
{
conditions.Add("(<<perform query for 'In-Person Visit Providers'>>)");
}
strSQL += " AND (" + String.Join(" OR ", list) + ") ";
}