我想使用DbExtensions构建一个SQL语句。我需要用AND和OR构建WHERE子句。就像这样
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%')
AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')我需要在循环内完成这个任务。
var builder = SQL
.SELECT("*")
.FROM("myTable")
.WHERE();
foreach (var field in fields) {
foreach (var value in field.values) {
builder.AppendClause("WHERE", " OR ", field.columnName + " LIKE {0}", new object[] { "%" + value.Value + "%" });
}
}上面的代码似乎产生了如下所示的SQL语句
SELECT *
FROM myTable
WHERE Field1 LIKE '%a%' OR Field1 LIKE '%b%'
OR Field2 LIKE '%a%' OR Field2 LIKE '%b%'正如您所看到的,如果没有方括号,并且有一个OR而不是一个AND。
无论如何,我可以让DbExtensions使用可用的方法来做我想做的事情,而不必将所有这些都写到另一个stringBuilder上?
编辑我已经按照建议修改了代码
var builder = SQL
.SELECT("*")
.FROM("myTable")
.WHERE();
foreach (var field in fields) {
builder._OR(field.values, field.columnName + " LIKE {0}", v => new object[1] { "%" + v.ToString() + "%" });
}但我还需要在当前块中添加一个OR。因此,假设每个字段都有一个名为"CheckBlank“的属性,如果为真,我需要添加”OR FieldX IS NULL“,这是怎么做的?因此,如果Field1.CheckBlank是真的,但Field2 CheckBlank是假的,那么我希望以这样的SQL结束
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%' OR Field1 IS NULL)
AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')发布于 2015-06-24 21:52:11
可以使用此示例生成指定的查询。
查询:
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%')
AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')执行此操作的代码段:
var builder = SQL
.SELECT("*")
.FROM("myTable")
.WHERE();
foreach (var field in fields) {
builder.WHERE("").Append("(")
var index = 0;
foreach (var value in field.values) {
builder.AppendClause("WHERE", index == 0 ? "": " OR ", field.columnName + " LIKE {0}", new object[] { "%" + value.Value + "%" });
}
index++;
builder.Append(")");
}发布于 2015-06-25 04:07:22
试试这个:
var builder = SQL
.SELECT("*")
.FROM("myTable")
.WHERE();
foreach (var field in fields) {
builder._OR(field.values, field.columnName + " LIKE {0}", v => new object[1] { "%" + v.ToString() + "%" });
}我不知道将%与参数值合并是否是最好的选择。我主要是和MySQL一起工作,在那里我做Field1 LIKE CONCAT('%', {0}, '%')。不要将参数值附加到格式字符串中,它可能会暴露一个注入。
https://stackoverflow.com/questions/31035822
复制相似问题