【问题标题】:LINQ 2 SQL error :The null value cannot be assigned to a member with type System.Byte which is a non-nullable value typeLINQ 2 SQL 错误:无法将空值分配给 System.Byte 类型的成员,该类型是不可为空的值类型
【发布时间】:2011-11-24 11:14:12
【问题描述】:

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

不能将 null 值分配给 System.Byte 类型的成员,该类型是不可为 null 的值类型

我的 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 中的值可能是 null 的原因。我该如何处理?有什么想法吗 ?提前感谢

【问题讨论】:

    标签: linq-to-sql


    【解决方案1】:

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

    解决这个问题

       YPosted = (byte?)y.POSTED
    

    【讨论】:

      【解决方案2】:

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

      private System.Nullable<Byte> Posted.
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多