🔥 Articles, eBooks, Jobs, Columnist, Forum, Podcasts, Courses 🎓



Left join usando Entity Framework

image

Olá leitor(a) meu nome é Mauricio Junior e hoje eu vou falar e mostrar como fazer um select usando Entity Framework e nele terá o famoso Left Join com o framework da Microsoft.

Aqui eu vou mostrar um método que fiz e nele eu vou fazer 3 inner joins e 1 left join. Lembro que aqui eu não vou mostrar como fazer a conexão com o banco de dados, só vou mostrar como fazer o left join usando o Entity Framework com .NETCore.

O framework gosta de usar muito alias para os nomes das tabelas, então baseado nisso, tome cuidado para não colocar qualquer nome e depois ficar perdido nos relacionamentos e nomes de campos. Eu costume usar um padrão de primeira letra da tabela e quando a tabela tem mais nomes, usar a primeira letra de cada nome; por exemplo: Member_Education eu vou usar me como alias.

O código 1.1 mostra como fiz toda a busca no banco de dados.

Código 1.1 - GetMember Education

public IList GetMemberEducation(int memberId)
{
	try
	{
		var result =
		(
			from me in _db.Member_Education_Level

			join rel in _db.Ref_Education_Level
				on me.Education_Level_Code equals rel.Education_Level_Code

			join m in _db.Member
				on me.Member_Id equals m.Member_Id

			join p in _db.Person
				on m.Person_Id equals p.Id

			join a in _db.Association
				on me.Entered_By_Association_Id equals a.Association_Id into ea1
			from ar in ar1.DefaultIfEmpty()   //left join


			where me.Member_Id == memberId

			select new
			{
				me.Id,
				MemberId = me.Member_Id,
				EnteredByAssociationId = me.Entered_By_Association_Id,
				EnteredByAssociationName = ar.Association_Name,
				EducationLevelCode = me.Education_Level_Code,
				EducationLevelDescription = rel.Education_Level_Description,
				TimeStampSeq = me.Timestamp_Seq,
				FirstInsertedBy = me.First_Inserted_By,
				FirstInsertedDateTime = me.First_Inserted_Datetime,
				LastChangedBy = me.Last_Changed_By,
				LastChangedDateTime = me.Last_Changed_Datetime,
				SourceSystemId = me.Source_System_Id,
				SourceMethodId = me.Source_Method_Id
			}

		).ToList();

		return result;

	}
	catch (Exception ex)
	{
		_logger.LogError($"Method: {MethodBase.GetCurrentMethod().Name} - Exception: {ex.Message} - {DateTime.Now}");
		throw ex;
	}
}

O primeiro passo do código é ver que o retorno é uma List ou melhor, uma interface de uma lista genérica.

Depois disso eu coloquei o bloco de try e catch para pegar algum erro se acontecer, até porque nunca se sabe.

O começo é a atribuição de todo select para variável result começando do from me (alias) com a tabela principal Member_Education_Level. O primeiro join é o inner join comum que relaciona as duas tabelas por uma chave comum entre elas. O segundo join com a tabela Member é também o relacionamento usando uma chave da tabela principal com a Member. O terceiro join é o relacionamento de Member com a tabela Person usando a chave Id entre elas.

Já o quarto join faz o relacionamento da tabela Member_Education_Level com a tabela de Association usando Association_Id como chave porém eu fiz uma atribuição usando into e from com o commando DefaultIfEmpty() que significa o seguinte: se não tiver nenhuma associação pelo campo chave, ou seja, nenhum valor relacionado entre as duas tabelas, não vai trazer nenhuma linha a mais. O resultado será o mesmo quando você faz o left join, mas o segredo aqui é o DefaultIfEmpty().

Depois disso adicionei a condição where me.Member_Id == memberId (parâmetro enviado) e para finalizar o select usei o comando select new { com os campos } que eu preciso retornar dentro da lista.

Depois do select chamei a opção .ToList() que transforma tudo na lista necessária para retorno.

Para finalizar o método, basta fazer o return result; com todos os dados retornados do select.

Eu fico por aqui e espero que tenha entendido. Qualquer dúvida pode entrar em contato comigo pelo Instagram @mauriciojunior_net ou pelo meu site www.mauriciojunior.net.

Subscribe ecode10.com

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.

Log In





Related articles




Top