Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar e mostrar como fazer um select com o LINQ para buscar as 20 primeiras linhas com mais de uma tabela do database.
Ferramentas:
- Ferramenta: Visual Studio
- Linguagem: C#
- LINQ
Normalmente nós utilizamos o comando SELECT TOP 20 FROM Table INNER JOIN Table2 ON Table.Id = Table2.Id WHERE Id = 2 ORDER BY Field desc
para buscar as 20 primeiras linhas de order decrescente. Note que existem duas tabelas relacionadas pelo campo Id com a condição WHERE Id = 2
. É sempre importante colocar uma condição para não trazer tudo do database de forma desnecessária e performance é importante para o usuário a todo tempo, desenvolvedores precisam pensar nisso a todo tempo também.
Código: Select usando LINQ
public IEnumerable GetLastVideosByUserId(int userId)
{
try
{
return
(
from vu in _db.VideoUser
join vm in _db.VideoModels
on vu.VideoId equals vm.VideoId
where vu.UserId == userId
select new
{
Title = vm.Title,
UserId = vu.UserId,
VideoId = vu.VideoId,
VideoLocalLink = vm.VideoLocalLink,
ImageVideo = vm.ImageVideo,
CourseId = vm.CourseId,
Date = vm.Date
}
).Take(20);
}
catch (Exception ex)
{
throw ex;
}
}
Note que eu estou retornando no método um IEnumerable e eu começo com o return () e dentro eu coloco o select que eu preciso fazer.
No LINQ eu começo com o FROM e usando um alias para cada tabela do database, depois para fazer o join basta usar a palavra JOIN e vincular as tabelas usando o ON normal.
No final eu preciso fazer um novo SELECT NEW com apenas os campos que eu preciso para retornar à aplicação que chamou o método. Quando fecha o parênteses do return, é necessário colocar o Take(20) onde caracteriza o TOP 20 de um SELECT normal do database. Esse comando TAKE(n) simplifica bastante e ao invés de retornar uma lista, retorno apenas o número de linhas que eu preciso que nesse caso é 20.
Bom, espero que tenha entendido e gostado. Eu fico por aqui e qualquer coisa pode entrar em contato comigo pelo site www.mauriciojunior.net ou pelas redes sociais @mauriciojunior.net.