【发布时间】:2020-08-18 22:43:26
【问题描述】:
使用 SqlKata 查询构建器,我想根据我拥有的值构建更新查询。 鉴于此代码:
var query = new Query("Users");
var user = new User{Age = 28, Name = "John"};
query.When(user.Age != null, q => q.AsUpdate(new {Age = user.Age}))
.When(user.Name != null, q => q.AsUpdate(new {Name = user.Name}));
生成的sql只有最后一个truthy子句。
【问题讨论】:
-
您希望 SQL 查询是什么样的?在我看来,您正在为不同的列更新构建几个具有不同条件的更新查询。 (如果是这种情况,您必须为每个查询创建一个新查询)。
-
UPDATE Users SET Age = 28 , Name = "John" WHERE...。我没有在问题中添加 Where 子句...
-
所以你想为每条记录更新多个列,匹配多个条件?然后你只需要使用一个
.When()调用并结合参数。.When(user.Age != null && user.Name != null, x => x.AsUpdate(new {Age = 1, Name = "Steve"})); -
如果只有一个有值,我想更新那个字段。如果name为null,我还是要更新age,反之亦然。
-
这应该在您的问题中指定。为此,您需要将
.AsUpdate()对象构建为ExpandoObject,然后使用您从数据中定义的逻辑来构建它。构建对象后,您可以将其强制转换为动态对象并在.AsUpdate((dyamic)expandoObject)docs.microsoft.com/en-us/dotnet/api/… 中引用它具体查看部分标题Enumerating and Deleting Members