Close Menu
Código Simples .NETCódigo Simples .NET
    Facebook X (Twitter) Instagram
    Trending
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    • Por que escalar escrita é tão mais difícil do que escalar leitura?
    • MongoDB Analyzer para .NET: Visualize e otimize suas consultas de forma simples
    • Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL
    Facebook X (Twitter) Instagram
    Código Simples .NETCódigo Simples .NET
    Código Simples .NETCódigo Simples .NET
    Home»Asp.net»Criando query dinamicas no Entity Framework com LinqKit

    Criando query dinamicas no Entity Framework com LinqKit

    Jhonathan SoaresBy Jhonathan Soares9 de maio de 20142 Mins Read Asp.net
    Share
    Facebook Twitter LinkedIn WhatsApp Copy Link

    Criação de query dinâmicas nem sempre é uma coisa muito fácil de se fazer. Com a evolução e popularização das tecnologias ORM (ex:  Entity e Hibernate) está cada vez mais usual a criação de consultas complexas e aos poucos comandos T-SQL e Storeds Procedures estão sendo descontinuadas.

    Claro que storeds e comandos SQL sempre irão existir, por N motivos, mas isto não vem ao caso agora. Vamos falar da facilidade de criação de “Where” e “If” em consultas com Entity Framework. Vamos utilizar LINQKit

    Vamos à definição do LINQKit oferecida pelo autor:

    LINQKit é um conjunto gratuito de extensões para LINQ para usuários avançados do Entity Framework e do SQL. Ela compreende o seguinte:

    • Uma implementação extensível de AsExpandable ()
    • Uma classe de expressão pública de base visitante (ExpressionVisitor)
    • PredicateBuilder
    • Linq.Expr e Linq.Func métodos de atalho

    Com LINQKit, você pode:

    • Ligue expressões em EntitySets e EntityCollections
    • Use variáveis ​​de expressão em subconsultas
    • Combine expressões (têm uma expressão chamar outro)
    • Dinamicamente construir predicados
    • Alavancar AsExpandable para adicionar suas próprias extensões.

    • AsExpandable é baseado em um projeto muito inteligente por Tomas Petricek. ExpressionVisitor vem de uma amostra por Matt Warren.

    LINQKit inclui código fonte completo, e é distribuído sob uma licença livre permissiva.

    Você pode ler exemplos e mais sobre a ferramenta aqui : http://www.albahari.com/nutshell/linqkit.aspx
    Você pode fazer o download da ferramenta pelo Nuget:
    Veja um exemplo utilizando bastante recursos da ferramenta :
           public ICollection<Pergunta> Consultar(string titulo, int ordenacao, int pagina, int registrosPorPagina, out int totalRegistros)
            {
                //Criando um predicado LinqKit do objeto Pergunta
                var predicate = PredicateBuilder.True<Pergunta>();
    
                //Adicionando um "Where" caso o titulo não seja nulo 
                if (!string.IsNullOrEmpty(titulo))
                    predicate = predicate.And(p => p.Texto.Contains(titulo));
    
                //Adicionando clausula de Status
                predicate = predicate.And(p => p.Status == (byte)Pergunta.enumStatusPergunta.Ativo);
    
                //Recebendo o total de registros
                totalRegistros = base.dbset.AsExpandable().Where(predicate).Count();
    
                //Adicionando if e ordenando pelo tipo de ordenacao desejada
                if (ordenacao == 1)
                {
                    //Retornando o predicado usando orderby e paginação
                    return base.dbset.AsExpandable().Where(predicate)
                   .OrderByDescending(x => x.DataCadastro)
                   .Skip((pagina - 1) * registrosPorPagina)
                   .Take(registrosPorPagina).ToList();
                }
                else
                {
                    //Retornando o predicado usando orderby e paginação
                    return base.dbset.AsExpandable().Where(predicate)
                  .OrderBy(x => x.DataCadastro)
                  .Skip((pagina - 1) * registrosPorPagina)
                  .Take(registrosPorPagina).ToList();
                }
            }
            
    Bom, espero que façam mais uso da ferramenta, porém tomem um pouco de cuidado, mas acredito que a criação de predicados afeta o desempenho da consulta.
    Bom, por hoje é só!
    Tá afim de fazer um curso de HTML 5 de graça oferecido pela Microsoft? Clique aqui! 🙂
    asp.net entity linq
    Share. Facebook Twitter LinkedIn Telegram WhatsApp Copy Link
    Jhonathan Soares
    • Website
    • Facebook
    • X (Twitter)
    • LinkedIn

    Criador do blog Código Simples e com mais 15 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist.

    Posts Relacionados

    Cardinalidade: O Conceito que Transforma o Desempenho de Bancos de Dados SQL e NoSQL

    NoSql Sql 14 de janeiro de 20257 Mins Read

    O que é a Ecma e qual é sua relação com C#?

    C# Post do Leitor 29 de julho de 20247 Mins Read

    Boas práticas de criação, armazenamento e validação de senhas em .NET

    Asp.net Boas práticas 9 de julho de 20248 Mins Read
    Newsletter

    Digite seu endereço de e-mail para receber notificações de novas publicações por e-mail.

    Junte-se a 25mil outros assinantes
    Posts recentes
    • NewSQL em 2025: O Estado Atual, Tendências e o Futuro dos Bancos de Dados Relacionais Escaláveis
    • 12 Regras Essenciais para Reduzir a Latência de Aplicações
    • Cache Hit Ratio: Como uma Simples Métrica Pode Revolucionar sua Arquitetura
    • Como a Uber calcula o tempo estimado de chegada
    • 30 APIs Gratuitas para desenvolvedores
    Categorias
    • Arquitetura (14)
      • Testes (2)
    • Asp.net (120)
      • C# (89)
      • Mvc (13)
    • Banco de dados (90)
      • NoSql (58)
      • Sql (38)
    • Boas práticas (29)
      • Gestão & Produtividade (1)
      • Metodologias Ágeis (6)
    • Cursos (52)
    • Dicas (105)
    • Front-End (92)
    • IA (1)
    • Linux (6)
    • NodeJS (4)
    • Post do Leitor (9)
    • Python (5)
    • Seo (12)
    • Tecnologia (30)
      • ITIL (1)
      • Padrões de Projeto (4)
    • Testes (2)

    VEJA TAMBÉM

    Cursos
    12 de fevereiro de 20166 Mins Read

    1000 livros gratuitos sobre programação!

    Olha que dica bacana! A pagina só com livros sobre programação é mantida no GitHub…

    30 APIs Gratuitas para desenvolvedores

    Facebook X (Twitter) Instagram LinkedIn

    Type above and press Enter to search. Press Esc to cancel.

    Vá para versão mobile