null和T之间没有隐式转换

时间:2019-07-15 13:02:36

标签: c# sql generics null dapper

参数“ T值”可以为null,问题是当我尝试运行T值为null(并且我的表允许为null)的dapper查询时,出现此错误

  

从数据类型sql_variant到datetime的隐式转换不是   允许的。使用CONVERT函数运行此查询。

所以在我的匿名对象中,我正在检查T值是否为null,但是我遇到的问题是:

  

由于''和'T'之间没有隐式转换,因此无法确定条件表达式的类型

问题所在行:

value = value.Equals(default(T)) ? null : value, 

如果T为空,我希望能够将值更新为NULL到表中,否则该值可以是int,string等类型。 任何人都可以帮助使它正常工作吗? 谢谢

代码:

   public async Task UpdateAsync<T>(string field, T value, int id)
    {
        using (var sql = dbConnectionFactory())
        {
            await sql.ExecuteAsync($@"
                UPDATE {TABLE} SET {field} = @value WHERE Id = @id",
                new
                {
                    value = value.Equals(default(T)) ? null : value,
                    id
                }
            );
        }
    }

1 个答案:

答案 0 :(得分:0)

您应该告诉compiller'T'可以为空

public async Task UpdateAsync<T>(string field, T value, int id) where T: class