Fazendo SELECT com LINQ para pegar x linhas

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.