LINQ 2 SQL错误:无法将null值分配给类型为System.Byte的成员,该类型是不可为空的值类型

时间:2010-06-29 17:52:07

标签: linq-to-sql

我正在尝试写一个LINQ 2 SQL查询wuth离开我们的连接。但是在执行时我得到了以下异常

无法将null值分配给System.Byte类型的成员,该类型为非可空值类型

我的LINQ 2 SQL查询在这里

 Dim items = (From i In oRecelDB.IV00200s _
                Group Join c In oRecelDB.MDS_CONTAINERs _
                    On c.CONTAINERBIN Equals i.BIN Into ic = Group From x In ic.DefaultIfEmpty() _
                Group Join sop In oRecelDB.SOP10201s _
                     On i.SERLNMBR Equals sop.SERLTNUM And i.ITEMNMBR Equals sop.ITEMNMBR _
                     Into os = Group From y In os.DefaultIfEmpty() _
                Group Join iv1 In oRecelDB.IV10002s _
                     On iv1.SERLTNUM Equals i.SERLNMBR And iv1.ITEMNMBR Equals i.ITEMNMBR _
                     Into iv2s = Group From z In iv2s.DefaultIfEmpty() _
                 Where i.SERLNMBR = "2323"  _
                 Select Bin = i.BIN, i.ITEMNMBR, i.LOCNCODE, i.DATERECD, i.SERLNMBR, i.SERLNSLD _
                , YPosted = y.POSTED).ToList()

据我所知, y.POSTED 中的值可能是空的原因。我该如何处理?有什么想法吗 ?谢谢你的推荐

2 个答案:

答案 0 :(得分:4)

问题是为该查询生成的SQL为该列返回一个空值,原因是左连接或返回null的子查询。 C#推断字节类型,因为表的列不可为空,但结果列可以为空。

通过执行

来解决此问题
   YPosted = (byte?)y.POSTED

答案 1 :(得分:1)

我能想到的一种可能性是,当您生成LINQ上下文类和对象类时,您有一个数据库字段设置为NOT NULL。后来您将数据库字段更改为Null,而某些记录包含空值。您可能必须查看dbml(LINQ)文件后面的代码。可以将像POSTED这样的可空字段声明为

private System.Nullable<Byte> Posted.

如果该字段未定义为可空,则可以将其更改为可为空或重新生成dbml文件,并解决您的问题。