Предполагая, что Context
имеет все соответствующие таблицы, уже определенные как сущности, и имеет надлежащие отношения, определенные:
Context.Clients
.Include("Applications")
.Include("Applications.CAContracts")
.Include("Applications.OpportunityAssignments")
.Include("Applications.OpportunityAssignments.OpportunityByApps")
.Where<Client>(c => (c.Applications
.Any<Application>(a => a.CAContracts
.Any<CAContract>(cac => cac.ID == 1212 && (cac.CAContractStatusId == 2 || cac.CAContractStatusId == 3)))
|| (c.Applications
.Any<Application>(a => a.OpportunityAssignments
.Any<OpportunityAssignment>(oa => oa.ID == 1212 && (oa.OpporStatusId == 5 || oa.OpporStatusId == 7) && oa.OpportunityByApps.Any<OpportunityByApp>()))))
.Select(c => new { ClientId = c.ClientId, CompanyName = c.CompanyName})
.Distinct()
.OrderBy(c => c.CompanyName);
Если бы я знал больше о схеме, я мог бы сделать немного лучше. В итоге вы получите коллекцию анонимных типов со свойствами ClientId и CompanyName; Я склонен избегать анонимных типов лично, если соответствующий объект не был бы чрезмерно большим.