首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Chain When子句使用SqlKata

Chain When子句使用SqlKata
EN

Stack Overflow用户
提问于 2020-08-19 06:43:27
回答 1查看 356关注 0票数 0

使用SqlKata查询构建器,我想根据我拥有的值构建一个更新查询。给定以下代码:

代码语言:javascript
复制
   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子句。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 15:48:01

这是预期的,您的代码类似于以下代码

代码语言:javascript
复制
if(age != null)
{
    query.AsUpdate(new {Age = age})   
}

if(name != null)
{
    query.AsUpdate(new {Name = name})   
}

在这种情况下,最后一个真实的语句将始终得到评估。

如果你想使用.When方法,至少你必须使用第二个参数WhenNot来计算else部分。

代码语言:javascript
复制
var query = new Query("Users").When(age != null, 
    q => q.AsUpdate(new {Age = age}),
    q => q.When(name != null,  q2 => q2.AsUpdate(new {Name = name}))
);

在操场上查看此示例: q.AsUpdate(new {Age = age}), q => q.When(name != null, q2 => q2.AsUpdate(new {Name = name})) );">WhenNot example

但为了获得更灵活的方式,我建议使用字典对象并过滤掉可以为空的值。

类似于( x.Value != null).ToDictionary(x => x.Key, x => x.Value); var query = new Query("Users").AsInsert(values);)">link

代码语言:javascript
复制
using System.Collections.Generic;
using System.Linq;

var values = new Dictionary<string, object> {
    {"Age", null},
    {"Name", "ahmad"}
}.Where(x => x.Value != null).ToDictionary(x => x.Key, x => x.Value);

var query = new Query("Users").AsInsert(values);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63477626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档