Já trabalho há um bom tempo com o LINQ. No entanto, permanece um pouco um mistério quais são as diferenças reais entre os sabores de LINQ mencionados.
A resposta bem-sucedida conterá uma breve diferenciação entre eles. Qual é o objetivo principal de cada sabor, qual é o benefício e existe um impacto no desempenho ...
PS: Eu sei que existem muitas fontes de informação por aí, mas estou procurando uma espécie de "folha de dicas" que instrui um novato sobre onde se dirigir para um objetivo específico.
Respostas:
todos eles são LINQ - Language Integrated Query - então todos eles compartilham muitos pontos em comum. Todos esses "dialetos" basicamente permitem que você faça uma seleção de dados no estilo consulta, de várias fontes.
Linq-to-SQL é a primeira tentativa da Microsoft em um ORM - Mapeador Relacional de Objeto. Ele oferece suporte apenas ao SQL Server. É uma tecnologia de mapeamento para mapear tabelas de banco de dados SQL Server para objetos .NET.
Linq-to-Entities é a mesma ideia, mas usando o Entity Framework em segundo plano, como o ORM - novamente da Microsoft, mas com suporte a vários back-ends de banco de dados
Linq-to-DataSets é LINQ, mas o uso é contra o "estilo antigo" ADO.NET 2.0 DataSets - antes do ORM da Microsoft, tudo que você podia fazer com o ADO.NET era retornar DataSets, DataTables etc. e Linq -to-DataSets consulta esses armazenamentos de dados em busca de dados. Portanto, neste caso, você retornaria um DataTable ou DataSets (namespace System.Data) de um back-end de banco de dados e, em seguida, consultaria aqueles usando a sintaxe LINQ
fonte
LINQ é um amplo conjunto de tecnologias, baseado em (por exemplo) uma sintaxe de compreensão de consulta, por exemplo:
que é mapeado pelo compilador em código:
e aqui começa a verdadeira magia. Observe que não dissemos o que
Foo
está aqui - e o compilador não se importa! Contanto que ele possa resolver algum método adequado chamadoWhere
que possa receber um lambda, e o resultado disso tenha algumSelect
método que possa aceitar o lambda, ele está feliz.Agora, considere que o lambda pode ser compilado tanto em um método anônimo (delegado, para LINQ-to-Objects, que inclui LINQ to DataSet), ou a uma expressão-árvore (um modelo de execução que representa o lambda em um modelo de objeto )
Para dados na memória (normalmente
IEnumerable<T>
), ele apenas executa o delegado - bem e rápido. Mas, paraIQueryable<T>
a representação de objeto da expressão (aLambdaExpression<...>
), ele pode separá-la e aplicá-la a qualquer exemplo "LINQ-to-Something".Para bancos de dados (LINQ-to-SQL, LINQ-to-Entities), isso pode significar escrever TSQL, por exemplo:
Mas pode (para ADO.NET Data Services, por exemplo) significar escrever uma consulta HTTP.
Executar uma consulta TSQL bem escrita que retorna uma pequena quantidade de dados é mais rápido do que carregar um banco de dados inteiro pela rede e, em seguida, filtrar no cliente. Ambos têm cenários ideais e cenários totalmente errados.
O objetivo e o benefício aqui é permitir que você use uma única sintaxe com verificação estática para consultar uma ampla gama de fontes de dados e tornar o código mais expressivo (código "tradicional" para agrupar dados, por exemplo, não é muito claro em termos do que está tentando fazer - está perdido na massa do código).
fonte
LINQ significa consulta integrada de linguagem. Ele permite que você use a linguagem de consulta "estilo SQL" diretamente em C # para extrair informações de fontes de dados.
Essa fonte de dados também pode ser um arquivo XML - Linq to XML .
Ou mesmo apenas uma classe Collection de objetos simples - Linq to Objects .
LINQ descreve a tecnologia de consulta, o resto do nome descreve a origem dos dados que estão sendo consultados.
Para um pouco mais de fundo:
Conjuntos de dados são objetos ADO.net nos quais os dados são carregados de um banco de dados em um conjunto de dados .net e o Linq pode ser usado para consultar esses dados depois de carregados.
Com o Linq para SQL, você define classes .net que mapeiam para o banco de dados e o Linq para SQL cuida do carregamento dos dados do banco de dados do servidor SQL
E, finalmente, o framework Entity é um sistema onde você pode definir um banco de dados e mapeamento de objetos em XML e pode então usar o Linq para consultar os dados que são carregados por meio desse mapeamento.
fonte