C# null和T之间没有隐式转换
参数“T value”可以为null,问题是当我尝试运行T value为null的dapper查询时(我的表不允许为null),我得到了这个错误 不支持从数据类型sql_variant到日期时间的隐式转换 允许。使用CONVERT函数运行此查询 因此,在我的匿名对象中,我正在检查T值是否为null,但我得到的问题是: 无法确定条件表达式的类型,因为“”和“T”之间没有隐式转换 线路问题:C# null和T之间没有隐式转换,c#,sql,generics,null,dapper,C#,Sql,Generics,Null,Dapper,参数“T value”可以为null,问题是当我尝试运行T value为null的dapper查询时(我的表不允许为null),我得到了这个错误 不支持从数据类型sql_variant到日期时间的隐式转换 允许。使用CONVERT函数运行此查询 因此,在我的匿名对象中,我正在检查T值是否为null,但我得到的问题是: 无法确定条件表达式的类型,因为“”和“T”之间没有隐式转换 线路问题: value = value.Equals(default(T)) ? null : value, 如果T
value = value.Equals(default(T)) ? null : value,
如果T为NULL,我希望能够将值更新为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
}
);
}
}
public异步任务UpdateAsync(字符串字段,T值,int-id)
{
使用(var sql=dbConnectionFactory())
{
等待sql.ExecuteAsync($@)
更新{TABLE}SET{field}=@value其中Id=@Id“,
新的
{
value=value.Equals(默认值(T))?null:value,
身份证件
}
);
}
}
您应该告诉编译器“T”可以为null
public async Task UpdateAsync<T>(string field, T value, int id) where T: class
公共异步任务UpdateAsync(字符串字段,T值,int-id),其中T:class
T可以是结构,因此null不是有效的默认值。请改用default(T)
。请告诉我们您使用value=value.Equals(default(T))试图实现什么?null:值,
。如果T是一个结构,它不能是null
。如果它是一个类,它的默认值是null
。另外,请注意bobby Tables。请至少向我们展示三个示例,说明您计划如何调用updateSync
。请确保向我们展示T
类型为string、int和nullable int(至少)的示例。这将使条件变得冗余-当T
是一个类时,default(T)
。