O que é o LINQ e o que ele faz? [fechadas]


126

O que é o LINQ? Eu sei que é para bancos de dados, mas o que faz?


20
Acredito ter derrotado o critério "não posso ser razoavelmente respondido". Não há razão para esta pergunta ser encerrada.
Amy B

1
Ouça o criador do LINQ, Erik Meijer, diga o que é. BTW, não é apenas para banco de dados.
21716

Respostas:


171

LINQ significa Consulta Integrada ao Idioma .

Em vez de escrever o YAQL (Yet Another Query Language), os desenvolvedores de idiomas da Microsoft forneceram uma maneira de expressar consultas diretamente em seus idiomas (como C # e Visual Basic). As técnicas para formar essas consultas não se baseiam nos detalhes de implementação da coisa que está sendo consultada, para que você possa escrever consultas válidas em vários destinos (bancos de dados, objetos na memória, XML) praticamente sem considerar a maneira subjacente pela qual o consulta será executada.

Vamos começar esta exploração com as partes pertencentes ao .NET Framework (3.5).

  • LINQ To Objects - examine System.Linq.Enumerable para métodos de consulta. Eles são direcionados IEnumerable<T>, permitindo que qualquer coleção loopable digitada seja consultada de maneira segura. Essas consultas dependem de métodos .NET compilados, não de expressões.

  • LINQ To Anything - examine System.Linq.Queryable para alguns métodos de consulta. Eles têm como alvo IQueryable<T>, permitindo a construção de Árvores de Expressão que podem ser convertidas pela implementação subjacente.

  • Árvores de expressão - examine o espaço de nome System.Linq.Expressions . Este é o código como dados. Na prática, você deve estar ciente disso, mas realmente não precisa escrever código nesses tipos. Recursos de idioma (como expressões lambda) podem permitir que você use várias mãos curtas para evitar lidar com esses tipos diretamente.

  • LINQ To SQL - examine o espaço para nome System.Data.Linq . Observe especialmente o DataContext. Essa é uma tecnologia DataAccess criada pela equipe de C #. Isso simplesmente funciona.

  • LINQ To Entities - examine o espaço para nome System.Data.Objects . Observe especialmente o ObjectContext. Essa é uma tecnologia DataAccess criada pela equipe do ADO.NET. É complexo, poderoso e mais difícil de usar que o LINQ To SQL.

  • LINQ To XML - examine o espaço para nome System.Xml.Linq . Essencialmente, as pessoas não estavam satisfeitas com o material System.Xml. Por isso, a Microsoft reescreveu e aproveitou a reescrita para introduzir alguns métodos que facilitam o uso do LINQ To Objects no XML.

  • Alguns tipos de ajudantes legais, como Func e Ação . Esses tipos são delegados com suporte genérico. Já se foram os dias de declarar seus próprios tipos de delegados personalizados (e não intercambiáveis).

Todas as opções acima fazem parte do .NET Framework e estão disponíveis em qualquer linguagem .NET (VB.NET, C #, IronPython, COBOL .NET etc.).


Ok, vamos aos recursos de idioma. Vou seguir o c #, já que é o que eu sei melhor. O VB.NET também teve várias melhorias semelhantes (e algumas que o C # não recebeu - literais XML). Esta é uma lista curta e incompleta.

  • Métodos de extensão - isso permite que você "adicione" um método para digitar. O método é realmente um método estático que recebe uma instância do tipo e é restrito ao contrato público do tipo, mas é muito útil para adicionar métodos aos tipos que você não controla (string) ou adicionar (totalmente implementado ) métodos auxiliares para interfaces.

  • Sintaxe de compreensão de consulta - permite escrever em uma estrutura semelhante a SQL. Todo esse material é traduzido para os métodos System.Linq.Queryable ou System.Linq.Enumerable (dependendo do Type of myCustomers). É completamente opcional e você pode usar bem o LINQ sem ele. Uma vantagem desse estilo de declaração de consulta é que as variáveis ​​de intervalo têm escopo definido: elas não precisam ser declaradas novamente para cada cláusula.

    IEnumerable<string> result =
     from c in myCustomers
     where c.Name.StartsWith("B")
     select c.Name;
  • Expressões Lambda - Esta é uma abreviação para especificar um método. O compilador C # converterá cada um em um método anônimo ou verdadeiro System.Linq.Expressions.Expression. Você realmente precisa entender isso para usar o Linq bem. Existem três partes: uma lista de parâmetros, uma seta e um corpo de método.

    IEnumerable<string> result = myCustomers
     .Where(c => c.Name.StartsWith("B"))
     .Select(c => c.Name);`
  • Tipos anônimos - Às vezes, o compilador possui informações suficientes para criar um tipo para você. Esses tipos não são realmente anônimos: o compilador os nomeia quando os cria. Mas esses nomes são criados em tempo de compilação, o que é muito tarde para um desenvolvedor usar esse nome em tempo de design.

    myCustomers.Select(c => new 
    {
      Name = c.Name;
      Age = c.Age;
    })
  • Tipos implícitos - Às vezes, o compilador possui informações suficientes de uma inicialização para descobrir o tipo para você. Você pode instruir o compilador a fazer isso usando a palavra-chave var. A digitação implícita é necessária para declarar variáveis ​​para tipos anônimos, pois os programadores não podem usar o nome de um tipo anônimo .

    // The compiler will determine that names is an IEnumerable<string>
    var names = myCustomers.Select(c => c.Name);

14

LINQ (Consulta Integrada ao Idioma) pode se referir a:

  • uma biblioteca para manipulação de coleção e iterador que faz uso extensivo de funções de ordem superior como argumentos (System.Linq)

  • uma biblioteca para passagem e manipulação de funções simples como árvores de sintaxe abstrata (System.Linq.Expressions)

  • uma extensão de sintaxe para vários idiomas para fornecer uma sintaxe mais semelhante ao SQL para o processamento de coleções, uma notação mais compacta para funções anônimas e um mecanismo para introduzir funções auxiliares estáticas sintaticamente indistinguíveis das funções-membro finais

  • uma definição de interface com a qual os provedores de dados podem estar em conformidade para receber a estrutura de consulta e potencialmente realizar otimização nela, ou ocasionalmente os próprios provedores de dados compatíveis

Os componentes podem ser utilizados isoladamente ou combinados.


10

Em poucas palavras, o LINQ (Consulta Integrada à Linguagem) permite que você escreva consultas diretamente no seu código. Essas consultas podem estar em bancos de dados relacionais, mas também em objetos de contêiner XML ou na memória, como matrizes e listas. Mais informações estão disponíveis na biblioteca do MSDN: http://msdn.microsoft.com/en-us/library/bb308959.aspx


isso é preciso e conciso.
SSD

6

Vou tentar uma resposta simples: o LINQ é uma maneira de você consultar seu banco de dados (ou outro armazenamento de dados, XML etc.) usando uma linguagem de consulta semelhante ao SQL, mas que pode ser compilada dentro de um aplicativo .NET.


1
Então, qual é exatamente a diferença entre Linq e SQL?
Kredns

Acho que há um nome mais sofisticado para isso, mas as estruturas diferem: SQL é Select From Where e LINQ é From Where Select. LINQ é mais fácil de usar. O LINQ é apenas mais fácil :) e o SQL que produz normalmente é bom o suficiente, considerando a economia de tempo.
jcollum

2
para ser honesto, pode-se argumentar SQL deve ser escrito como From Where Select, etc.- ou seja, ele deve ser escrito na forma que o conjunto de resultados é na verdade formado
Don Cheadle

6

LINQ significa Language Integrated Query e é uma maneira de fornecer um mecanismo de "consulta" de uso geral no CLR.

No nível mais básico, isso consiste em um conjunto de métodos em IEnumerable <T> - por exemplo, Select, Sum, Where - que podem ser usados ​​para restrições, projeções etc. [1]

Para ir um pouco mais longe, o LINQ também define um novo modelo de provedor LINQ que pode pegar uma árvore de expressão e usá-lo para executar consultas "nativas" em uma fonte de dados fora do CLR - por exemplo, LINQ to SQL, LINQ to XML, LINQ to XML, LINQ para NHibernate, etc.

O C # e o VB.NET também definiram uma sintaxe de consulta que permite escrever consultas fortemente tipadas em linha (que se parecem muito com SQL), que o compilador converte nas chamadas IEnumerable <T> equivalentes.

Para mim, a coisa mais interessante sobre o LINQ é que todos os recursos de C # e VB.NET necessários para suportá-lo são úteis por si só. Métodos de extensão, tipos anônimos, expressões lambda e tipagem implícita foram todos necessários para dar suporte ao LINQ - mas tendemos a usar esses recursos fora de um contexto LINQ puro.

[1] Esses são termos relacionais, os programadores funcionais provavelmente preferem Map, Reduce, Fold, etc.


5

O LINQ é uma tecnologia para extrair dados usando um idioma derivado da linguagem de programação C #. Embora ele deva muito ao design funcional do SQL, é fundamentalmente sua própria linguagem de consulta de dados. Ele opera em um amplo espectro de fontes de dados (bancos de dados SQL, representações na memória, XML, etc.). O LINQ-To-SQL, em particular, deve ser visto como um contraste com o uso tradicional de SQL incorporado, que sofre com o que geralmente é chamado de "incompatibilidade de impedância" entre a programação SQL e a programação C # / VB.

Para uma discussão sobre o LINQ e suas limitações, você pode dar uma olhada nesta pergunta relacionada: O LINQ to SQL não entende o ponto?


0

http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

"O Projeto LINQ é um nome de código para um conjunto de extensões do .NET Framework que abrange operações de consulta, configuração e transformação integradas ao idioma. Estende C # e Visual Basic com sintaxe de idioma nativo para consultas e fornece bibliotecas de classes para tirar proveito esses recursos ".


Então é para bancos de dados? Pelo que eu vi aqui (no SO), é mais parecido com coleções no ambiente .net.
OscarRyz 23/01/09
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.