C# 当包含带有空子对象的孙子对象时,可空对象必须具有值

C# 当包含带有空子对象的孙子对象时,可空对象必须具有值,c#,entity-framework-6,C#,Entity Framework 6,我们目前在Entity Framework中遇到了一个问题,我们从数据库中获取了一些东西,这些东西的子元素可以为null,并且还试图包含孙子元素 范例 var workItems = _context.WorkItems .Include(x => x.Contract) .Include(x => x.Contract.ContractAccount) 若合同为空(这是允许的),那个么当它试图包含ContractAccount时,由

我们目前在Entity Framework中遇到了一个问题,我们从数据库中获取了一些东西,这些东西的子元素可以为null,并且还试图包含孙子元素

范例

var workItems = _context.WorkItems
            .Include(x => x.Contract)
            .Include(x => x.Contract.ContractAccount)
若合同为空(这是允许的),那个么当它试图包含ContractAccount时,由于合同为空而失败

到目前为止,我们已经尝试对孙辈中的孩子进行空检查

i、 e

我们还尝试使用

DefaultIfEmpty(new Contract()) 
这似乎也是不允许的

我们需要返回完整的工作项及其contract/contractaccount,如果它有一个返回给用户,但是如果没有合同,那么它应该只返回工作项


感谢您的帮助。

代替
合同??空:合同账户
试着

 Contract.HasValue ? Contract.Value: defaultValue
根据
C#Nullable
文档,如果未将T类型的值分配给Nullable对象,则可以将其与null进行比较并检索其HasValue属性,但无法访问其value属性或调用其其他成员


使用
然后包括

var workItems = _context.WorkItems
        .Include(x => x.Contract)
        .ThenInclude(contract => contract.ContractAccount);

您好,这似乎不适用于。包括。Include(c=>c.Contract.HasValue)给出了一个错误,即HasValue不是一种契约方法。您好,我们使用的是EF6而不是EF Core,所以Include不可用。是的,现在一切正常。我很想知道是否有一个解决方案没有第三方图书馆,但接受你的答案,因为它已经解决了我们的问题。谢谢你的帮助!
var workItems = _context.WorkItems
        .Include(x => x.Contract)
        .ThenInclude(contract => contract.ContractAccount);