c# - SQLKata 动态 Where 子句
问题描述
我正在使用SQLKata
在其中构建一个SQL
语句,C#
并在 Github 论坛上找到了一些代码,但它无法编译。我需要帮助才能编译它。
我在这条线上收到两个错误query.Where(q =>
编译错误(第 17 行,第 16 列):并非所有代码路径都返回“System.Func”类型的 lambda 表达式中的值
编译错误(第 17 行,第 16 列):无法将 lambda 表达式转换为类型“对象”,因为它不是委托类型
class Group
{
public List<Condition> Conditions {get; set;}
}
class Condition
{
public string Field {get; set;}
public string Operator {get; set;}
public object Value {get; set;}
}
var query = new Query("Countries");
foreach(Group group in groups)
{
query.Where(q =>
{
foreach(Condition c in group.Conditions)
{
q.OrWhere(c.Field, c.Operator, c.Value);
}
});
}
.NET Fiddle 在这里
Github在这里发帖
更新 我已经根据亚历克斯的回答更新了小提琴。我正在寻找一个子句,所以预期的输出是用括号括起来的 OR 语句。它现在大部分都按预期工作,除了每个组都应该在它自己的括号内,如下所示:
SELECT * FROM [Countries] WHERE ([Group1Field1] = @p0 OR [Group1Field2] > @p1 OR [Group1Field3] < @p2 OR [Group1Field4] = @p3) OR ([Group2Field1] = @p4 OR [Group2Field2] >= @p5 OR [Group2Field3] <= @p6) AND [Id] = @p7
最终更新 想通了。给出上述预期输出。谢谢。
var query = new Query("Countries");
foreach (Group group in groups)
{
query.OrWhere(q => {
foreach (Condition c in group.Conditions)
{
q.OrWhere(c.Field, c.Operator, c.Value);
}
return q;
});
}
query.Where("Id", "=", 10);
解决方案
我已经更新了代码以修复错误。
var query = new Query("Countries");
foreach (Group group in groups)
{
query.OrWhere(q => {
foreach (Condition c in group.Conditions)
{
q.OrWhere(c.Field, c.Operator, c.Value);
}
return q;
});
}
query.Where("Id", "=", 10);
推荐阅读
- flutter - 是否有 Flutter StreamBuilder 可以让我收听多个流?
- c# - 在根目录的匹配目录中查找选择所有匹配文件的最佳方法
- google-chrome - 谷歌浏览器禁用标签工具提示弹出窗口
- javascript - JQuery - 在列表更改显示/隐藏具有 ID 匹配选项值的元素
- xamarin - Xamarin Android 构建只是在启用链接器时挂起
- swift - 如何修复 Swift 5.1 中的“使用未声明的类型”错误?
- flutter - I/Process (22926):发送信号。PID:22926 SIG:9 失去与设备的连接。在颤振中使用firebase时
- python - 如何将函数别名为 SymPy 中的符号
- r - 将一行拆分为具有 R 中条件的列
- python - 强制 numpy 函数的输出形状