C# &引用;指定的强制转换无效";将空值返回为可空值时<;int>;
在我的SQL数据库中,我有以下视图:C# &引用;指定的强制转换无效";将空值返回为可空值时<;int>;,c#,.net,sql-server,linq-to-sql,C#,.net,Sql Server,Linq To Sql,在我的SQL数据库中,我有以下视图: CREATE VIEW MyView AS (SELECT ChangeType FROM MyTable) UNION ALL (SELECT NULL AS ChangeType FROM MyTable) 其中ChangeType具有类型TINYINT。在我的C代码中,我有一个类: [Table(Name = "MyView")] public class MyView { [Column] public Nullable<in
CREATE VIEW MyView AS
(SELECT ChangeType FROM MyTable) UNION ALL
(SELECT NULL AS ChangeType FROM MyTable)
其中ChangeType
具有类型TINYINT
。在我的C代码中,我有一个类:
[Table(Name = "MyView")]
public class MyView
{
[Column]
public Nullable<int> ChangeType;
}
如果我将UNION
的第二部分更改如下:
var table = dataContext.GetTable<MyView>();
var elements = table.ToArray();
(SELECT CONVERT(INT,NULL) AS ChangeType FROM MyTable)
同样的代码运行得很好
为什么在那里“强制转换无效”?为什么不直接读取TINYINT
来代替int
为什么Tinyin不能代替int来读取呢
因为TINYINT
映射到short
或sbyte
[Column]
public Nullable<byte> ChangeType;
编辑:它是一个无符号字节,所以使用byte
[Column]
public Nullable<byte> ChangeType;
[栏目]
公共可为空的ChangeType;
堆栈跟踪显示Linq2Sql映射程序调用.get\u Int32()
。假设这类似于,则意味着它将尝试读取32位值,不应用任何转换
为什么Tinyin不能代替int来读取呢
因为TINYINT
映射到short
或sbyte
[Column]
public Nullable<byte> ChangeType;
编辑:它是一个无符号字节,所以使用byte
[Column]
public Nullable<byte> ChangeType;
[栏目]
公共可为空的ChangeType;
堆栈跟踪显示Linq2Sql映射程序调用.get\u Int32()
。假设这类似于,则意味着它将尝试读取32位值,不应用任何转换。尝试使用
[Column]
public Nullable<Int32> ChangeType; //for int type
public Nullable<Int16> ChangeType; //for smallint type
[栏目]
公共可为空的ChangeType//对于int类型
公共可为空的ChangeType//对于smallint类型
尝试使用
[Column]
public Nullable<Int32> ChangeType; //for int type
public Nullable<Int16> ChangeType; //for smallint type
[栏目]
公共可为空的ChangeType//对于int类型
公共可为空的ChangeType//对于smallint类型
不管怎样,tinyint适合int正好好,为什么会出现异常?是的,您可以(隐式地)将字节
值转换为int
。但不能对字节大小的列调用GetInt32()。更严格的规则。太好了,你能在答案中包含最后一位吗?不管怎样,tinyint适合int,为什么会出现异常?是的,你可以(隐式)将字节
值转换为int
。但不能对字节大小的列调用GetInt32()。更严格的规则。太好了,你能在答案中加入最后一位吗?参见本文:TinyInt映射到CLR中的字节参见本文:TinyInt映射到CLR中的字节参见本文:TinyInt映射到CLR中的字节参见本文:TinyInt映射到CLR中的字节