子句使用SqlKata时的链接

问题描述

使用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仅具有最后一个true子句。

解决方法

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

if(age != null)
{
    query.AsUpdate(new {Age = age})   
}

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

在这种情况下,最后的真实陈述将始终得到评估。

如果至少要使用.When方法,则必须使用第二个参数WhenNot来评估else部分。

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}))
);

在操场上查看以下示例:WhenNot example

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

类似于(link

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);

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...