DbExtensions - 如何使用OR条件创建WHERE子句?

时间:2013-08-15 17:28:03

标签: ado.net oledb dbextensions

我正在尝试使用DbExtensions创建WHEREOR条件。

我正在尝试生成类似

的SQL语句
SELECT ID, NAME
FROM EMPLOYEE
WHERE ID = 100 OR NAME = 'TEST'

我的C#代码是

var sql = SQL.SELECT("ID, FIRSTNAME")
             .FROM("EMPLOYEE")
             .WHERE("ID = {0}", 10)
             .WHERE("NAME = {0}", "TEST");

如何使用上述DbExtensions库获取OR分隔符?

3 个答案:

答案 0 :(得分:1)

我找到了逻辑OR运算符here

的定义
  public SqlBuilder _OR<T>(IEnumerable<T> items, string itemFormat, Func<T, object[]> parametersFactory) {
     return _ForEach(items, "({0})", itemFormat, " OR ", parametersFactory);
  }

一些代码示例here

 public SqlBuilder Or() {

 int[][] parameters = { new[] { 1, 2 }, new[] { 3, 4} };

 return SQL
    .SELECT("p.ProductID, p.ProductName")
    .FROM("Products p")
    .WHERE()
    ._OR(parameters, "(p.CategoryID = {0} AND p.SupplierID = {1})", p => new object[] { p[0], p[1] })
    .ORDER_BY("p.ProductName, p.ProductID DESC");
 }

我认为(通过类比示例)你的案例代码应该是这样的(但我无法测试它):

var params = new string[] { "TEST" };

var sql = SQL.SELECT("ID, FIRSTNAME")
             .FROM("EMPLOYEE")
             .WHERE("ID = {0}", 10)
             ._OR(params, "NAME = {0}", p => new object[] { p })

希望这会有所帮助:)


顺便问一下......你试过这种方式吗?

var sql = SQL.SELECT("ID, FIRSTNAME")
             .FROM("EMPLOYEE")
             .WHERE(string.Format("ID = {0} OR NAME = '{1}'", 10, "TEST"))

答案 1 :(得分:0)

这比你想象的要简单:

var sql = SQL
   .SELECT("ID, FIRSTNAME")
   .FROM("EMPLOYEE")
   .WHERE("(ID = {0} OR NAME = {1})", 10, "TEST");

答案 2 :(得分:0)

可以使用:

.AppendClause("OR", ",", "NAME = {0}",new object[]{"TEST"});