代码之家  ›  专栏  ›  技术社区  ›  Shyju

Linq 2 SQL错误:不能将空值赋给类型为System.Byte的成员,后者是不可为空的值类型

  •  4
  • Shyju  · 技术社区  · 14 年前

    我正试图编写一个Linq2 SQL查询wuth离开了我们的联接。但是在执行时,我得到了下面的异常

    不能将空值赋给类型为System.Byte的成员,后者是不可为空的值类型

    我的Linq2 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.已发布 空值可能是原因。我如何处理?有什么想法吗?谢谢你的宣传

    2 回复  |  直到 13 年前
        1
  •  5
  •   Devid G    14 年前

    问题是,为该查询生成的SQL正在返回该列的空值,这可能是由于左联接或返回空值的子查询所致。C正在推断字节类型,因为表的列不可以为空,但结果的列可以为空。

    通过这样做来解决这个问题

       YPosted = (byte?)y.POSTED
    
        2
  •  1
  •   josephj1989    14 年前

    我能想到的一种可能性是,当您生成了Linq上下文类和对象类时,您的数据库字段被设置为非空。稍后,您将数据库字段更改为空,并且某些记录包含空值。您可能需要查看DBML(Linq)文件的代码隐藏文件。像post这样的可空字段应该声明为

    private System.Nullable<Byte> Posted.
    

    如果该字段未定义为可以为空,则可以将其更改为可以为空或重新生成DBML文件,这样就解决了问题。