沒有看到架構,我們不能肯定地說,但我不相信你需要一個子查詢。搜索可以通過強制用戶通過下拉列表選擇製作,模型等工作。在這種情況下,你需要的是一系列與報表基於選擇的標準:
Select ...
From MyTable
Where Make = @Make
And Model = @Model
...
你會建立一個基於由未指定用戶排除那些要求參數在C#代碼這個SQL語句。也就是說,如果用戶沒有選擇一個模型,你就不會包含那個And語句。
你的SQL彙編代碼可能看起來像
private function Search(string make, string model, ...)
{
var sql = new StringBuilder();
sql.AppendLine("Select .... ");
sql.AppendLine("From MyTable");
sql.AppendLine("Where 1=1"); //this is just to add the Where keyword
var parameters = List<DbParameter>();
if (!string.IsNullOrEmpty(make))
{
sql.AppendLine(" And Make = @Make ");
parameters.AddWithValue("@Make", make);
}
if (!string.IsNullOrEmpty(model))
{
sql.AppendLine(" And Model = @Model ");
parameters.AddWithValue("@Model", model);
}
...
}
另一個appoach是簡單地構建整個SQL語句檢查空值:
var sql = new StringBuilder();
sql.AppendLine("Select .... ");
sql.AppendLine("From MyTable");
sql.AppendLine("Where (@Make Is Null Or Make = @Make")
sql.AppendLine(" And (@Model Is Null Or Model = @Model")
...