繁体   English   中英

LINQ:如果导航属性为null,则设置默认值

[英]LINQ: Set a default value if navigation property is null

这是我当前的LINQ语句:

var results = from l in leads
    select new MyObject
    {
        LeadID = l.LeadID,
        SelectedProposalEngineerID = l.LeadContacts.Where(contact => contact.LeadContactTypeID == LeadContactType.ProposalEngineer).FirstOrDefault().ContactID
    };

我遇到的麻烦是最后一项通常为null。 因此,当我尝试将“结果”转换为列表时,

{“强制转换为值类型'System.Int32',因为实例化值为null。结果类型的通用参数或查询必须使用可为空的类型。”

我不想将SelectedProposalEngineerID设置为可为null的int,因为这会导致下游问题。 当它为null时,如何将其值设为0?

我已经看到许多其他有关此问题的线索,但是我似乎无法针对这种情况调整他们的任何答案。

使用DefaultIfEmpty扩展方法。

var results = from l in leads
    select new MyObject
    {
        LeadID = l.LeadID,
        SelectedProposalEngineerID = 
            l.LeadContacts.Where(contact => contact.LeadContactTypeID == LeadContactType.ProposalEngineer)
                          .Select(contact => contact.ContactID)
                          .DefaultIfEmpty(0)
                          .FirstOrDefault()
    };
Nullable<int> ID;
var results = from l in leads
select new MyObject
{
    LeadID = l.LeadID,
    SelectedProposalEngineerID = (ID = l.LeadContacts.Where(contact => contact.LeadContactTypeID == LeadContactType.ProposalEngineer).FirstOrDefault().ContactID).HasValue ? ID.Value : 0;
};

三元操作员应完成这项工作。 将结果分配给一个变量,然后如果它不为null,则将该变量转换为int并返回它,否则返回0。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM