Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# null和T之间没有隐式转换_C#_Sql_Generics_Null_Dapper - Fatal编程技术网

C# 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

参数“T value”可以为null,问题是当我尝试运行T value为null的dapper查询时(我的表不允许为null),我得到了这个错误

不支持从数据类型sql_variant到日期时间的隐式转换 允许。使用CONVERT函数运行此查询

因此,在我的匿名对象中,我正在检查T值是否为null,但我得到的问题是:

无法确定条件表达式的类型,因为“”和“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)