Join with three or more tables with lambda

4

I made this expression using Lambda and 2 tables.

var resultado = db.T_TarefaParceiro.Join(
                db.T_OsParceiro,
                t1 => t1.IDTarefaParceiro,
                t2 => t2.IDTarefaParceiro,
                (t1, t2) => new { t1, t2 })
                .Where(a => a.t1.IDTarefaParceiro == a.t2.IDTarefaParceiro && a.t2.Is_Tarefa_Fechada == true)
                .Select(i => new { i.t1.CNPJ });

I'm having trouble putting a third or fourth table. I tried to create another Join clause, but it gave an error. How I do?

    
asked by anonymous 30.05.2014 / 01:13

1 answer

5

Everything will depend on how your relationships and keys are, a basic example would look like this:

Tables and Relationships

Uma Pessoa pode ter ou não vários Telefones e um Telefone possui um Tipo

LambdaExpressionwith2Join,iethreetables,consequentlythreemodels:

using (GenericsContext db = new GenericsContext()) { var resultado = db.Pessoas .Join(db.Telefones, pessoa => pessoa.PessoaId, telefone => telefone.PessoaId, (pessoa, telefone) => new { pessoa, telefone }) .Join(db.Tipos, telefone => telefone.telefone.TipoId, tipo => tipo.TipoId, (telefone, tipo) => new { telefone, tipo }) .Select(x => new { x.telefone.pessoa.PessoaId, x.telefone.pessoa.Nome, x.tipo.Descricao, x.telefone.telefone.Ddd, x.telefone.telefone.Numero }); var resultadoToList = resultado.ToList(); }

SQL generated by this expression:

SELECT 
    [Extent1].[PessoaId] AS [PessoaId], 
    [Extent1].[Nome] AS [Nome], 
    [Extent3].[Descricao] AS [Descricao], 
    [Extent2].[Ddd] AS [Ddd], 
    [Extent2].[Numero] AS [Numero]
    FROM   [dbo].[Pessoas] AS [Extent1]
    INNER JOIN [dbo].[Telefones] AS [Extent2] ON [Extent1].[PessoaId] = [Extent2].[PessoaId]
    INNER JOIN [dbo].[Tipos] AS [Extent3] ON [Extent2].[TipoId] = [Extent3].[TipoId]
    
30.05.2014 / 02:03