没有看到架构,我们不能肯定地说,但我不相信你需要一个子查询。搜索可以通过强制用户通过下拉列表选择制作,模型等工作。在这种情况下,你需要的是一系列与报表基于选择的标准:
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")
...