2

我正在尝试使用DbExtensionsWHERE创建带有OR条件的子句。

我正在尝试生成看起来像的 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 分隔符?

4

3 回答 3

1

我在这里找到了逻辑 OR 运算符的定义

  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"))
于 2013-08-17T19:16:32.393 回答
0

一个可以使用:

.AppendClause("OR", ",", "NAME = {0}",new object[]{"TEST"});
于 2014-08-20T11:51:07.567 回答
0

它比你想象的要简单:

var sql = SQL
   .SELECT("ID, FIRSTNAME")
   .FROM("EMPLOYEE")
   .WHERE("(ID = {0} OR NAME = {1})", 10, "TEST");
于 2013-08-25T05:22:14.180 回答