Q:

Null reference in LINQ query

I will try to phrase this to the best of my abilities. I'm currently trying to grab a value called Program but I am having trouble with my LINQ query 
Interactions = new BindableCollection<InteractionDTO>(_client.Interactions.
    Select(x => new InteractionDTO
    {         
       Id = x.Id,
       ClientName = x.Person.CorrespondenceName,
       Indepth = x.Indepth,
       Program = x.Allocations.FirstOrDefault(y => y.Interaction_Id == x.Id).Program.Value,
       Category = x.Allocations.FirstOrDefault().Category.Value,
       ActivityDate = x.ActivityDate,
       Type = x.Type,
       Subject = x.Subject,
       LoanApplicationProvided = x.LoanApplicationProvided,
       BusinessPlanProvided = x.BusinessPlanProvided
    }));

The error I get is Object reference not set to an instance of an object.
When I comment out below it works but Program isn't brought through.
Program = x.Allocations.FirstOrDefault(y => y.Interaction_Id == x.Id).Program.Value,
Category = x.Allocations.FirstOrDefault().Category.Value

My goal from the LINQ query: Has to look up interactions, then get the Program/CategoryID from InterActionAllocations then gets the "value" from InteractionPrograms.
Program.cs
// Primary Keys -------------------------------------------------------
public int Id { get; set; }

[InverseProperty("Interaction")]
public virtual ICollection<InteractionAllocation> Allocations { get; set; }

InteractionAllocation.cs
// Associations -------------------------------------------------------
public int Interaction_Id { get; set; }

[ForeignKey("Interaction_Id")]
public virtual Interaction Interaction { get; set; }

public int? Category_Id { get; set; }

[ForeignKey("Category_Id")]
public InteractionCategory Category { get; set; }

A:

I think the best way to tackle this is to store the Program and Category as intermediary result and then use the conditional operator (?). This works better with the let keyword in comprehensive syntax:
from i in _client.Interactions
let program = x.Allocations.Where(y => y.Interaction_Id == x.Id)
                           .Select(a => a.Program).FirstOrDefault()
let cat = x.Allocations.Select(a => a.Category).FirstOrDefault()
select new InteractionDTO
    {         
       Id = x.Id,
       ClientName = x.Person.CorrespondenceName,
       Indepth = x.Indepth,
       Program = program == null ? null : program.Value,
       Category = cat == null ? null : cat.Value,
       ActivityDate = x.ActivityDate,
       Type = x.Type,
       Subject = x.Subject,
       LoanApplicationProvided = x.LoanApplicationProvided,
       BusinessPlanProvided = x.BusinessPlanProvided
    }

