参数“ 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
}
);
}
}
答案 0 :(得分:0)
您应该告诉compiller'T'可以为空
public async Task UpdateAsync<T>(string field, T value, int id) where T: class