image

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.