Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DbExtensions-其中带有AND和OR_C#_Sql_Asp.net_.net_Dbextensions - Fatal编程技术网

C# DbExtensions-其中带有AND和OR

C# DbExtensions-其中带有AND和OR,c#,sql,asp.net,.net,dbextensions,C#,Sql,Asp.net,.net,Dbextensions,我想使用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") .WHE

我想使用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%'
正如你所看到的,if没有任何括号,用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”的属性,如果为true,我需要添加“OR FieldX IS NULL”,这怎么办?因此,如果Field1.CheckBlank为true,而Field2 CheckBlank为false,那么我希望以这样的SQL结束

SELECT *
FROM myTable
WHERE (Field1 LIKE '%a%' OR Field1 LIKE '%b%' OR Field1 IS NULL)
    AND (Field2 LIKE '%a%' OR Field2 LIKE '%b%')

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

查询:

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(")");
    }
试试这个:

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,比如CONCAT(“%”,{0},“%”)
。不要将参数值附加到格式字符串,它可能会暴露注入。

您可以提供DbExtension库的链接吗?Max我如何将查询附加到OR?编辑的问题更详细。伟大的图书馆顺便说一句!