Inquiridor
Consulta Linq C#

Pergunta
-
Boa tarde
Tenho a seguinte estrutura de banco de dados:
Tabelas:
-Usuario
-Grupo
-Permissao
E todas as relações N pra N:
- GrupoUsuario
- PermissaoUsuario
- PermissaoGrupo
Montei uma consulta pra retornar o usuário, independente de Grupos e Permissões (LEFT JOIN) com Linq em C#.
Segue:
tbUsuario = (from _u in _authEntities.tb_usuario join _gu in _authEntities.tb_grupo_usuario on _u.id_tb_usuario equals _gu.id_tb_usuario into u from usuario in u.DefaultIfEmpty() join _pu in _authEntities.tb_permissao_usuario on _u.id_tb_usuario equals _pu.id_tb_usuario into p from permissao in p.DefaultIfEmpty() where _u.login == login && _u.senha == senha select _u).SingleOrDefault();
Só que está faltando o LEFT JOIN para a tabela 'tb_permissao_grupo'.
Alguém poderia me ajudar com isso?
Desde já, agradeço.
Todas as Respostas
-
Olá,
Utilize o DefaultIfEmpty para o Left Join.
Segue um link com explicação e exemplo:https://msdn.microsoft.com/pt-BR/library/bb397895.aspx
Ok?
--
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta- Editado Rodrigo Suleiman quinta-feira, 26 de janeiro de 2017 17:05
-
Oi Rodrigo
Na verdade já estou usando o DefaultIfEmpty.
Assim como fiz com as outras junções.
Porém estou com dificuldades na última junção, conforme mencionei:
- tb_permissao_grupo (Permissao x Grupo)
A partir da consulta que eu já montei.
- Editado Rafaselic quinta-feira, 26 de janeiro de 2017 18:16
-
Bom dia,
Segue um exemplo usando Left em varias tabelas:
var sql = ctx.TB1 .GroupJoin(ctx.TB2, t1 => t1.ID, t2 => t2.ID, (t1, t2) => new { t1, t2 }) .SelectMany(i => i.t2.DefaultIfEmpty(), (t1, t2) => new { t1, t2 }) .GroupJoin(ctx.TB3, t1 => t1.t1.t1.ID, t3 => t3.ID, (t1, t3) => new { t1, t3 }) .SelectMany(i => i.t3.DefaultIfEmpty(), (t1, t3) => new { t1, t3 }) .Where(i => i.t1.t1.t1.t1.ID == 5) .ToList();
Repare que o conceito é o mesmo para uma ou muitas... Nesse exemplo filtrei onde o ID da TB1 seja igual a cinco.