首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DbExtensions - WHERE和AND

DbExtensions - WHERE和AND
EN

Stack Overflow用户
提问于 2015-06-24 19:57:31
回答 2查看 570关注 0票数 0

我想使用DbExtensions构建一个SQL语句。我需要用AND和OR构建WHERE子句。就像这样

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%')
    AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')

我需要在循环内完成这个任务。

代码语言:javascript
复制
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语句

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE Field1 LIKE '%a%' OR Field1 LIKE '%b%'
    OR Field2 LIKE '%a%' OR Field2 LIKE '%b%'

正如您所看到的,如果没有方括号,并且有一个OR而不是一个AND。

无论如何,我可以让DbExtensions使用可用的方法来做我想做的事情,而不必将所有这些都写到另一个stringBuilder上?

编辑我已经按照建议修改了代码

代码语言:javascript
复制
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结束

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%' OR Field1 IS NULL)
    AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')
EN

回答 2

Stack Overflow用户

发布于 2015-06-24 21:52:11

可以使用此示例生成指定的查询。

查询:

代码语言:javascript
复制
SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%')
    AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')

执行此操作的代码段:

代码语言:javascript
复制
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(")");
    }
票数 0
EN

Stack Overflow用户

发布于 2015-06-25 04:07:22

试试这个:

代码语言:javascript
复制
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}, '%')。不要将参数值附加到格式字符串中,它可能会暴露一个注入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31035822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档