【发布时间】:2021-02-02 20:40:14
【问题描述】:
大家好,可能是一个快速的答案,但我正在努力解决这个问题,认为一定有更好的方法。
如果字符串的条件不为 null 或为空,我有 4 个字符串,我将其添加到查询中,但第一个始终不需要 AND,因此我添加了 WHERE 1 = 1,然后我可以添加 AND ID = @ID 等,因此可以添加所有四个。我错过了什么?
Dim sqlBuilder As New StringBuilder()
'1 = 1 allows an and.
sqlBuilder.Append("SELECT * FROM table WHERE 1=1 ")
If Surname <> "" Then
sqlBuilder.Append(" AND Surname=@surname")
End If
If Payroll <> "" Then
sqlBuilder.Append(" AND payroll = @payroll")
End If
If VehicleReg <> "" Then
sqlBuilder.Append(" AND registration = @registration")
End If
If OrgID > 0 Then
sqlBuilder.Append(" AND OrganisationID = @orgid")
End If
【问题讨论】:
-
您遇到错误了吗?如果有,那是什么?
-
你的所作所为对我来说似乎很好,但我建议的唯一一件事是检查你的 builder 的长度,然后只在需要时添加“AND”
-
没有错误我只是想知道是否有更好的方法。
-
我个人会坚持使用这个(或其他一些 LINQ 构建的链)而不是一个“上帝查询”。请参阅我对@jmcilhinney 答案的评论了解原因。