【问题标题】:How to join multiple WHERE clauses together in SqlKata?如何在 SqlKata 中将多个 WHERE 子句连接在一起?
【发布时间】:2018-11-08 11:49:08
【问题描述】:

我正在使用SqlKata 创建动态 SQL 查询。我有一个条件列表,存储在我的数据库中,这些条件是根据我的业务规则生成的。这是我的代码示例:

var list = new List<Query>();
foreach(var rule in rules){
    var q = new Query()
       .Where(x=> x.Where("Price", "<", rule.Price).OrWhere("GoodsType", "=", rule.Type));
    list.Add(q);
}

现在我想将这个列表项加入到一起,但没有一个 Where() 扩展重载接受 Query 类型参数。有没有办法将 where 子句连接在一起?

这是我需要生成的预期查询的一小部分。

select * from ship_schedule where Path = @path and scheduleDate= @Date
AND (FD.IssueType ='O' OR fd.Path!='ILMTOP' OR  (fd.Path='ILMTOP' AND F.carrier !='MAL'))
AND (FD.IssueType ='O' OR fd.Path!='TOPILM' OR  (fd.Path='ILMTOP' AND F.carrier !='MAL'))

我需要将查询的第二行创建到最后。

【问题讨论】:

  • 你能写出预期的 SQL 吗?

标签: c# sql .net sqlkata


【解决方案1】:

Where方法是累加的,多次调用会为查询添加多个条件,所以不需要自己构建条件列表。

var query = new Query("ship_schedule").Where("Path", path);

foreach(var rule in rules) {
  // loop over rules and append them to the query

  if(col == null) {

    query.WhereNull(col);

  } else {

    query.Where(q => 
      q.Where("Price", "<", rule.Price)
        .OrWhere("GoodsType", "=", rule.Type)
    )

  }
}

其他方式

使用When 方法

query.When(condition, q => q.Where(...));

使用WhereIf 方法

query.WhereIf(condition, "Id", "=", 10);

【讨论】:

  • 我有一些类型的规则,我想创建一堆帮助方法来创建我的 where 子句部分,然后将它们连接在一起。
  • 并且在某些情况下我的规则的属性为空或 null 并且必须被忽略。这意味着我必须独立创建这个 Where 部分并以最终状态加入它们。
  • 我需要一种动态创建括号封闭条件的方法
  • 为什么不能在循环内执行此操作?
  • 循环不是我的问题...如果和条件破坏了流畅的方法。
猜你喜欢
  • 2019-08-22
  • 2019-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 2017-06-23
  • 2015-12-15
相关资源
最近更新 更多