嗨我有一个表格,其中有一个具有DateTime且为Nullable的RespondBy属性。这是我试图在EF6上运行的linq:
IEnumerable<Enquiry> ASAPEnquiries = db.Enquiries
.Where(enq => enq.RespondBy == null && enq.JobCostings.Count == 0)
.OrderBy(enq => enq.FlReference);
但是,当我运行if (ASAPEnquiries.Count() > 0)
时,我收到一条错误,指出Nullable object must have a value.
如果要检查null DateTime列,如何使用linq查询数据库?
谢谢。
修改
在MSSMS中测试时由EF生成的SQL会返回所需的结果FYI。 SQL Produced:
SELECT
[Project1].[Id] AS [Id],
[Project1].[FlReference] AS [FlReference],
[Project1].[EnquiryDate] AS [EnquiryDate],
[Project1].[ContactName] AS [ContactName],
[Project1].[ProjectReference] AS [ProjectReference],
[Project1].[EnquiryDetails] AS [EnquiryDetails],
[Project1].[RespondBy] AS [RespondBy],
[Project1].[CreatedBy] AS [CreatedBy],
[Project1].[Created] AS [Created],
[Project1].[ModifiedBy] AS [ModifiedBy],
[Project1].[Modified] AS [Modified],
[Project1].[RowVersion] AS [RowVersion],
[Project1].[Enquiry_Customer] AS [Enquiry_Customer],
[Project1].[Enquiry_EnquiryStatus] AS [Enquiry_EnquiryStatus]
FROM ( SELECT
[Extent1].[Id] AS [Id],
[Extent1].[FlReference] AS [FlReference],
[Extent1].[EnquiryDate] AS [EnquiryDate],
[Extent1].[ContactName] AS [ContactName],
[Extent1].[ProjectReference] AS [ProjectReference],
[Extent1].[EnquiryDetails] AS [EnquiryDetails],
[Extent1].[RespondBy] AS [RespondBy],
[Extent1].[CreatedBy] AS [CreatedBy],
[Extent1].[Created] AS [Created],
[Extent1].[ModifiedBy] AS [ModifiedBy],
[Extent1].[Modified] AS [Modified],
[Extent1].[RowVersion] AS [RowVersion],
[Extent1].[Enquiry_Customer] AS [Enquiry_Customer],
[Extent1].[Enquiry_EnquiryStatus] AS [Enquiry_EnquiryStatus],
(SELECT
COUNT(1) AS [A1]
FROM [dbo].[JobCostings] AS [Extent2]
WHERE [Extent1].[Id] = [Extent2].[JobCosting_Enquiry]) AS [C1]
FROM [dbo].[Enquiries] AS [Extent1]
) AS [Project1]
WHERE ([Project1].[RespondBy] IS NULL) AND (0 = [Project1].[C1])
ORDER BY [Project1].[FluidReference] ASC
另外,如果我遍历集合,我没有得到任何错误,所以它似乎与在集合上调用.Count()有关。
答案 0 :(得分:1)
使用HasValue属性检查Nullable是否具有值。
IEnumerable<Enquiry> ASAPEnquiries = db.Enquiries
.Where(enq => enq.RespondBy.HasValue && enq.JobCostings.Count == 0)
.OrderBy(enq => enq.FlReference);
答案 1 :(得分:0)
请确保您的Enquiry
类为其中JobCostings
属性的构造函数赋值
e.g。
public Enquiry()
{
this.JobCostings = new HashSet<JobCosting>();
//.......
}
试试这个:
IEnumerable<Enquiry> ASAPEnquiries = db.Enquiries
.Where(enq => enq.RespondBy == null && !enq.JobCostings.Any())
.OrderBy(enq => enq.FlReference);
答案 2 :(得分:0)
看起来我有egg on my face. if语句调用了一个空格,然后我使用item.RespondBy.Value.ToShortDateTime()。多么尴尬。谢谢大家的帮助,感谢您的光临。