当包含具有空子代的孙子时,可空对象必须具有一个值

时间:2019-01-07 13:45:33

标签: c# entity-framework-6

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

示例

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

如果contract为null(允许),则当尝试包含ContractAccount时,由于Contract为null而失败。

到目前为止,我们已经尝试过对孙子内部的孩子进行空检查。

Contract ?? null : ContractAccount

我们也尝试使用

DefaultIfEmpty(new Contract()) 

似乎也不允许。

如果有完整的WorkItem及其合同/合约帐户,我们需要将其退还给用户,但是如果没有合同,则应只返回WorkItem。

任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

使用ThenInclude

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

答案 1 :(得分:0)

in place of Contract ?? null : ContractAccount try like

 Contract.HasValue ? Contract.Value: defaultValue

According to C# Nullable Documentation If a value of type T has not been assigned to the Nullable object, you can compare it to null and retrieve its HasValue property, but you cannot access its Value property or call its other members.

you can check Nullable Docs