【发布时间】:2019-10-12 00:35:17
【问题描述】:
我正在使用SQLKata 在C# 中构建一个SQL 语句,并在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 是 here
Github 发帖here
更新 我已经根据亚历克斯的回答更新了小提琴。我正在寻找一个子句,所以预期的输出是用括号括起来的 OR 语句。它现在大部分都在按预期工作除了每个组都应该在它自己的括号内,如下所示:
SELECT * FROM [Countries] WHERE ([Group1Field1] = @p0 OR [Group1Field2] > @p1 OR [Group1Field3] = @p5 OR [Group2Field3]
最终更新 弄清楚了。给出上述预期输出。谢谢。
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);
【问题讨论】:
-
您期望
Console.WriteLine(sql);的输出是什么? -
您应该将您的解决方案发布为答案并将其标记为已解决