无法分配空值 - LINQ查询问题

时间:2009-04-22 02:26:18

标签: linq

我有以下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
            };

我获得notes集合的最大创建日期的行会导致抛出以下异常:

  

异常:无法将null值分配给a   具有System.DateTime类型的成员   是一个不可为空的值类型。

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

5 个答案:

答案 0 :(得分:23)

想想我弄清楚了。

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

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

正如其他人所指出的那样,它也可以用可缩短的DateTime的简写表示法编写,如下所示:

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

答案 1 :(得分:9)

将该行重写为:

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

答案 2 :(得分:3)

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

无法在网上找到这个,所以我希望这有助于其他人。

答案 3 :(得分:1)

在VB中是这样的:

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

我想......

答案 4 :(得分:0)

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

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