【问题标题】:Null value cannot be assigned - LINQ query question无法分配空值 - LINQ 查询问题
【发布时间】:2023-03-18 12:05:02
【问题描述】:

我有以下 LINQ 查询:

DataClassesDataContext dc = new DataClassesDataContext(); 
var query = from contact in dc.Contacts
            select new
            {
                ContactId = contact.ContactId,
                LastName = contact.LastName,
                FirstName = contact.FirstName,
                Addresses = contact.Addresses,
                Phones = contact.Phones,
                DOB = contact.BirthDate,
                LastNote = contact.Notes.Max(n => n.Created), //this line causes the error
                Status = contact.ContactStatus.ContactStatusName,
                EmailAddress = contact.Emails
            };

我获得笔记集合的最大创建日期的行导致引发以下异常:

异常:空值不能分配给 System.DateTime 类型的成员 是一个不可为空的值类型。

如何编写查询以允许在 LastNote 字段中输入空值? DOB 字段定义为 DateTime?并且处理空值没有问题。

【问题讨论】:

    标签: linq


    【解决方案1】:

    我想我明白了。

    如果我将最大音符值转换为可为空的 DateTime,它似乎消除了异常。以下更改对我有用:

    LastNote = (Nullable<DateTime>)contact.Notes.Max(n => n.Created)
    

    正如其他人所指出的,它也可以使用可空 DateTime 的简写符号如下:

    LastNote = (DateTime?) contact.Notes.Max(n => n.Created)
    

    【讨论】:

    • 我正要建议
    • 这行得通,但仅供参考是 DateTime 的简写吗?相当于 Nullable (参见 Keltex 的帖子)
    【解决方案2】:

    将该行重写为:

    LastNote = (DateTime?) contact.Notes.Max(n => n.Created),
    

    【讨论】:

      【解决方案3】:
      LastNote = contact.Notes.Max(n => (DateTime?)n.Created)
      

      在网上找不到这个,所以我希望这对其他人有帮助。

      【讨论】:

        【解决方案4】:

        在 VB 中是这样的:

        LastNote = CType(contact.Notes.Max(n => n.Created), Global.System.Nullable(Of Date))
        

        我觉得……

        【讨论】:

          【解决方案5】:

          可以这样做,或者您可以更改您的数据库架构,以便“已创建”列不允许空值。

          出现这种情况是因为其中一行返回的 Created 值为空。 如果 db 不允许空值,则该场景将永远不会发生。

          【讨论】:

          • 如果联系人从未创建过任何笔记,您仍然会从对 Max 的调用中得到空值。
          • 此建议无效。总是有机会拥有一个空的 DateTime。我现在已经使用了几个具有 DT 字段的数据库,例如“关闭日期”......尚未应用关闭日期,因此为空。
          猜你喜欢
          • 1970-01-01
          • 2012-04-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-21
          相关资源
          最近更新 更多