![](/img/trans.png)
[英]Reuse methods containing same properties but different lambda where clause condition
[英]SQL Server: How to write conditional WHERE clause containing different queries per condition?
我在 StackOverflow 上找到了一堆關於條件 WHERE 子句的答案,但我無法找到一個特定於我的問題的答案,所以只是尋求一點幫助......
我公司的網站包含直接在 C# 代碼中編寫的所有 SQL 查詢(我不喜歡那個,但這是另一個故事)&我在嘗試更新包含基於 WHERE 子句中的多個條件的查詢時遇到問題用戶在表單上選中的復選框。
表單中有一組復選框(目前有 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'>>)";
}
}
當前的問題顯然是在選擇多個選項時上述查詢沒有考慮到。 選擇多個選項時,條件運營商需要為“或“,不是”和“”,但是我不確定如何在不弄亂的情況下最好地設置此設置並考慮到添加'L選項。
只是好奇設置它的最佳方法。
您可以定義一個字符串列表並添加您的條件,然后使用" 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) + ") ";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.