我有以下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?并且没有处理空值的问题。
答案 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不允许空值,则场景永远不会发生。