I am writing a join query in LINQ with multiple tables. In the query in one portion I have implemented outer join. The query working fine when there is data in both agentdeployment and agentlookup table but it is giving error when there is no data in agentlookup table. My query is like this:
this.db.Workflows.Where(e => e.WorkflowId == processFlowId).Join(this.db.WorkflowNodes,
wf => wf.WorkflowId,
node => node.WorkflowId,
(wf, node) => new
{
Workflow = wf,
WorkfloNode = node
}
).Join(this.db.NodeConfigurations,
wNode => wNode.WorkfloNode.WorkflowNodeId,
config => config.NodeId,
(p, v) => new
{
Workflow = p.Workflow,
WorkfloNode = p.WorkfloNode,
NodeConfiguration = v
}).Join(this.db.AgentDeployments,
wfData => wfData.Workflow.WorkflowId,
deplData => deplData.WorkflowId,
(workflowData, depl) => new
{
Workflow = workflowData.Workflow,
WorkfloNode = workflowData.WorkfloNode,
NodeConfiguration = workflowData.NodeConfiguration,
DeployedItems = depl
}).GroupJoin(this.db.AgentLookupMappings, wData => wData.DeployedItems.AgentDeploymentId, lk => lk.AgentDeploymentId,
(e1, e2) => new
{
Workflow = e1.Workflow,
WorkfloNode = e1.WorkfloNode,
NodeConfiguration = e1.NodeConfiguration,
DeployedItems = e1.DeployedItems,
LookUp = e2
})
.GroupBy(e => new { e.Workflow.WorkflowId, e.Workflow.WorkflowName },
(key, g) => new
{
WorkflowId = key.WorkflowId,
WorkflowName = key.WorkflowName,
Groups = g.ToList()
}).AsEnumerable().Select(e => new WorkflowData
{
WorkflowId = e.WorkflowId,
WorkflowName = e.WorkflowName,
DeploymentDetails = e.Groups.DistinctBy(d => d.DeployedItems.AgentDeploymentId)
.Select(t => new WorkflowDeploymentDetails
{
DeployedAt = t.DeployedItems.DeployedAt,
DeployedVersionNumber = t.DeployedItems.DeployedVersionNumber,
AgentDeploymentId = t.DeployedItems.AgentDeploymentId,
AgentLookupMappings=e.Groups.SelectMany(p1 => p1.LookUp.DefaultIfEmpty(), (x, y) => new LookupMapping {
CategoryName = y.CategoryName,
LookupTypeName = y.LookupTypeName,
AgentLookupMappingId=y.AgentLookupMappingId
}).DistinctBy(d2=>d2.AgentLookupMappingId).ToList()
}).ToList(),
Nodes = e.Groups.DistinctBy(kk => kk.WorkfloNode.WorkflowNodeId).Select(k => new WorkflowNodeItem
{
WorkflowNodeId = k.WorkfloNode.WorkflowNodeId,
NodeType = k.WorkfloNode.NodeType,
NodeText = k.WorkfloNode.NodeText,
NodeConfigList = e.Groups.Where(ee => ee.NodeConfiguration.NodeId == k.WorkfloNode.WorkflowNodeId).Select(f => new NodeConfigData { ConfigKey = f.NodeConfiguration.ConfigKey, ConfigVal = f.NodeConfiguration.ConfigVal }).ToList()
})
.ToList()
}).ToList();
I am getting null exception error in this section
e.Groups.SelectMany(p1 => p1.LookUp.DefaultIfEmpty(), (x, y) => new LookupMapping {
CategoryName = y.CategoryName,
LookupTypeName = y.LookupTypeName,
AgentLookupMappingId=y.AgentLookupMappingId
})
How to bypass the error
Thanks Utpal Maity