我正在使用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'))
我需要在结尾创建查询的第二行。
答案 0 :(得分:5)
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);