Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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# &引用;指定的强制转换无效";将空值返回为可空值时<;int>;_C#_.net_Sql Server_Linq To Sql - Fatal编程技术网

C# &引用;指定的强制转换无效";将空值返回为可空值时<;int>;

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

在我的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<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中的字节