Follow a query Linnum and another lambda.
This is just another way to solve.
Variables to use in LINQ
var notas = new List<Nota>();
var fornecedores = new List<Fornecedor>();
var produtos = new List<Produto>();
var classes = new List<Classe>();
Populating for example
var nota1 = new Nota { id = 1, idFornecedor = 1, idProduto = 1, idClasse = 1 };
var nota2 = new Nota { id = 1, idFornecedor = 1, idProduto = 2, idClasse = 2 };
var fornecedor1 = new Fornecedor { id = 1, descricao = "Fornecedor1" };
var produto1 = new Produto { id = 1, descricao = "Produto1" };
var produto2 = new Produto { id = 2, descricao = "Produto2" };
var classe1 = new Classe { id = 1, descricao = "Classe1" };
var classe2 = new Classe { id = 2, descricao = "Classe2" };
notas.Add(nota1);
notas.Add(nota2);
fornecedores.Add(fornecedor1);
produtos.Add(produto1);
produtos.Add(produto2);
classes.Add(classe1);
classes.Add(classe2);
To be used on the LAMBDA
var notasQ = new EnumerableQuery<Nota>(notas);
var fornecedoresQ = new EnumerableQuery<Fornecedor>(fornecedores);
var produtosQ = new EnumerableQuery<Produto>(produtos);
var classesQ = new EnumerableQuery<Classe>(classes);
LINQ consultation
var NotaCompletaLINQ = from no in notas
join fo in fornecedores on no.idFornecedor equals fo.id
join pr in produtos on no.idProduto equals pr.id
join cl in classes on no.idClasse equals cl.id
select new {
no.id,
no.idFornecedor,
no.idProduto,
no.idClasse,
fornecedorDescricao = pr.descricao,
produtoDescricao = pr.descricao,
classeDescricao = cl.descricao
};
Consultation LAMBDA
var NotaCompletaLAMBDA = notasQ
.Join(fornecedoresQ, nota => nota.idFornecedor, forn => forn.id, (nota, forn) => new { nota, forn })
.Join(produtosQ, nota => nota.nota.idProduto, prod => prod.id, (nota, prod) => new { nota.nota, nota.forn, prod })
.Join(classesQ, nota => nota.nota.idClasse, clas => clas.id, (nota, clas) => new { nota.nota, nota.forn, nota.prod, clas })
.Select(x => new {
x.nota.id,
x.nota.idFornecedor,
x.nota.idProduto,
x.nota.idClasse,
fornecedorDescricao = x.forn.descricao,
produtoDescricao = x.prod.descricao,
classeDescricao = x.clas.descricao
});
Obs
It was necessary to transform their fields into properties (simplified).
public class Nota {
public int id { get; set; }
public int idFornecedor { get; set; }
public int idProduto { get; set; }
public int idClasse { get; set; }
}
public class Fornecedor {
public int id { get; set; }
public string descricao { get; set; }
}
public class Produto {
public int id { get; set; }
public string descricao { get; set; }
}
public class Classe {
public int id { get; set; }
public string descricao { get; set; }
}
tell me one thing, these classes are automatically created via Entity Framework. How can I do the example you mentioned above?
– Italo Rodrigo
You did reverse engineering then to create the class, right? Which means you did Database First In the opposite sense, you do Code First. Take a look at my Github repository on how to get started with Codefirst. Can help.
– Thiago Lunardi