LINQ расшифровывается как Language Integrated Query .
Вместо того, чтобы писать YAQL (еще один язык запросов), разработчики языков Microsoft предоставили способ выражать запросы непосредственно на своих языках (таких как C # и Visual Basic). Методы формирования этих запросов не зависят от деталей реализации запрашиваемого объекта, поэтому вы можете писать действительные запросы для многих целей (базы данных, объекты в памяти, XML) практически без учета основного способа, которым запрос будет выполнен.
Начнем это исследование с частей, принадлежащих .NET Framework (3.5).
LINQ To Objects - проверьте System.Linq.Enumerable на предмет методов запроса. Эти цели IEnumerable<T>позволяют запрашивать любую типизированную циклическую коллекцию безопасным для типов способом. Эти запросы полагаются на скомпилированные методы .NET, а не на выражения.
LINQ To Anything - проверьте System.Linq.Queryable на предмет некоторых методов запроса. Они нацелены IQueryable<T>на создание деревьев выражений, которые могут быть переведены базовой реализацией.
Деревья выражений - изучите пространство имен System.Linq.Expressions . Это код как данные. На практике вы должны знать об этом, но на самом деле не нужно писать код для этих типов. Языковые функции (такие как лямбда-выражения) могут позволить вам использовать различные сокращения, чтобы не иметь дело с этими типами напрямую.
LINQ To SQL - изучите пространство имен System.Data.Linq . Особенно обратите внимание на DataContext. Это технология DataAccess, созданная командой C #. Это просто работает.
LINQ To Entities - изучите пространство имен System.Data.Objects . Особенно обратите внимание на ObjectContext. Это технология DataAccess, созданная командой ADO.NET. Он сложный, мощный и сложный в использовании, чем LINQ To SQL.
LINQ To XML - изучите пространство имен System.Xml.Linq . По сути, люди не были довольны тем, что там было System.Xml. Поэтому Microsoft переписала его и воспользовалась преимуществами переписывания, чтобы ввести некоторые методы, которые упрощают использование LINQ To Objects против XML.
Несколько хороших вспомогательных типов, таких как Func и Action . Эти типы являются делегатами с общей поддержкой. Прошли те времена, когда объявлялись ваши собственные (и не взаимозаменяемые) типы делегатов.
Все вышеперечисленное является частью .NET Framework и доступно на любом языке .NET (VB.NET, C #, IronPython, COBOL .NET и т. Д.).
Хорошо, перейдем к языковым возможностям. Я собираюсь придерживаться C #, потому что это то, что я знаю лучше всего. VB.NET также имеет несколько подобных улучшений (и пару, которую не получил C # - литералы XML). Это короткий и неполный список.
Методы расширения - это позволяет вам «добавить» метод к типу. Этот метод на самом деле является статическим методом, которому передается экземпляр типа и ограничен общедоступным контрактом типа, но он очень полезен для добавления методов к типам, которые вы не контролируете (строка), или добавления (полностью реализовано ) вспомогательные методы для интерфейсов.
Синтаксис понимания запросов - это позволяет писать в структуре типа SQL. Все это транслируется в методы в System.Linq.Queryable или System.Linq.Enumerable (в зависимости от типа myCustomers). Это совершенно необязательно, и вы можете хорошо использовать LINQ и без него. Одним из преимуществ этого стиля объявления запроса является то, что переменные диапазона имеют ограниченную область видимости: их не нужно повторно объявлять для каждого предложения.
IEnumerable<string> result =from c in myCustomers
where c.Name.StartsWith("B")select c.Name;
Лямбда-выражения - это сокращение для указания метода. Компилятор C # переведет каждый из них либо в анонимный метод, либо в истинный System.Linq.Expressions.Expression. Вам действительно нужно понимать это, чтобы хорошо использовать Linq. Он состоит из трех частей: списка параметров, стрелки и тела метода.
IEnumerable<string> result = myCustomers
.Where(c => c.Name.StartsWith("B")).Select(c => c.Name);`
Анонимные типы. Иногда у компилятора достаточно информации, чтобы создать для вас тип. Эти типы не являются действительно анонимными: компилятор называет их, когда создает. Но эти имена создаются во время компиляции, а разработчику уже слишком поздно использовать это имя во время разработки.
Неявные типы. Иногда компилятор получает достаточно информации от инициализации, чтобы определить тип за вас. Вы можете указать компилятору сделать это с помощью ключевого слова var. Неявная типизация требуется для объявления переменных для анонимных типов, поскольку программисты не могут использовать имя анонимного типа.
// The compiler will determine that names is an IEnumerable<string>var names = myCustomers.Select(c => c.Name);
LINQ (Language INtegrated Query) может относиться к:
библиотека для манипулирования коллекциями и итераторами, которая широко использует функции высшего порядка в качестве аргументов (System.Linq)
библиотека для передачи и управления простыми функциями как абстрактными синтаксическими деревьями (System.Linq.Expressions)
расширение синтаксиса для различных языков, чтобы обеспечить синтаксис, более похожий на SQL, для обработки коллекций, более компактную нотацию для анонимных функций и механизм для введения статических вспомогательных функций, синтаксически неотличимых от конечных функций-членов
определение интерфейса, которому могут соответствовать поставщики данных, чтобы получать структуру запроса и потенциально выполнять оптимизацию, или иногда сами совместимые поставщики данных
Компоненты можно использовать по отдельности или вместе.
Короче говоря, LINQ (Language-Integrated Query) позволяет писать запросы прямо в коде. Эти запросы могут относиться к реляционным базам данных, а также к объектам XML или контейнерам в памяти, таким как массивы и списки. Дополнительная информация доступна в библиотеке MSDN: http://msdn.microsoft.com/en-us/library/bb308959.aspx
Я попытаюсь дать простой ответ: LINQ - это способ запроса вашей базы данных (или другого хранилища данных, XML и т. Д.) С использованием языка запросов, который похож на SQL, но может быть скомпилирован внутри приложения .NET.
Я думаю, что для этого есть более сложное название, но структуры различаются: SQL - это Select From Where, а LINQ - From Where Select. LINQ проще использовать в цикле. LINQ просто проще :) и SQL, который он создает, обычно достаточно хорош, учитывая экономию времени.
jcollum
2
честно говоря, можно утверждать, что SQL должен быть написан как From Where Select, etc.- то есть он должен быть написан так, как фактически формируется набор результатов
Don Cheadle
6
LINQ расшифровывается как Language Integrated Query и представляет собой способ предоставления механизма «запросов» общего назначения в CLR.
На самом базовом уровне он состоит из набора методов IEnumerable <T> - например, Select, Sum, Where - которые могут использоваться для ограничений, проекций и т. Д. [1]
Чтобы пойти дальше, LINQ также определяет новую модель поставщика LINQ, которая может принимать дерево выражений и использовать его для выполнения «собственных» запросов к источнику данных вне среды CLR, например, LINQ to SQL, LINQ to XML, LINQ. в NHibernate и т. д.
C # и VB.NET также определили синтаксис запроса, который позволяет вам писать строго типизированные запросы в строке (которые очень похожи на SQL), которые компилятор затем переводит в эквивалентные вызовы IEnumerable <T>.
Для меня самое интересное в LINQ - это то, что все функции C # и VB.NET, необходимые для его поддержки, полезны сами по себе. Для поддержки LINQ требовались методы расширения, анонимные типы, лямбда-выражения и неявная типизация, но мы склонны использовать эти функции вне чистого контекста LINQ.
[1] Это реляционные термины, функциональные программисты, вероятно, предпочтут Map, Reduce, Fold и т. Д.
LINQ - это технология извлечения данных с использованием идиомы, заимствованной из языка программирования C #. Хотя функциональным дизайном он во многом обязан SQL, по сути, это собственный язык запросов к данным. Он работает с широким спектром источников данных (базы данных SQL, представления в памяти, XML и т. Д.). LINQ-To-SQL, в частности, следует рассматривать как контраст с традиционным использованием встроенного SQL, который страдает от того, что часто называют «несоответствием импеданса» между программированием SQL и программированием на C # / VB.
«Проект LINQ - это кодовое имя для набора расширений .NET Framework, которые охватывают интегрированные в язык операции запроса, задания и преобразования. Он расширяет C # и Visual Basic синтаксисом на собственном языке для запросов и предоставляет библиотеки классов, позволяющие использовать преимущества эти возможности ".
Ответы:
LINQ расшифровывается как Language Integrated Query .
Вместо того, чтобы писать YAQL (еще один язык запросов), разработчики языков Microsoft предоставили способ выражать запросы непосредственно на своих языках (таких как C # и Visual Basic). Методы формирования этих запросов не зависят от деталей реализации запрашиваемого объекта, поэтому вы можете писать действительные запросы для многих целей (базы данных, объекты в памяти, XML) практически без учета основного способа, которым запрос будет выполнен.
Начнем это исследование с частей, принадлежащих .NET Framework (3.5).
LINQ To Objects - проверьте System.Linq.Enumerable на предмет методов запроса. Эти цели
IEnumerable<T>
позволяют запрашивать любую типизированную циклическую коллекцию безопасным для типов способом. Эти запросы полагаются на скомпилированные методы .NET, а не на выражения.LINQ To Anything - проверьте System.Linq.Queryable на предмет некоторых методов запроса. Они нацелены
IQueryable<T>
на создание деревьев выражений, которые могут быть переведены базовой реализацией.Деревья выражений - изучите пространство имен System.Linq.Expressions . Это код как данные. На практике вы должны знать об этом, но на самом деле не нужно писать код для этих типов. Языковые функции (такие как лямбда-выражения) могут позволить вам использовать различные сокращения, чтобы не иметь дело с этими типами напрямую.
LINQ To SQL - изучите пространство имен System.Data.Linq . Особенно обратите внимание на
DataContext
. Это технология DataAccess, созданная командой C #. Это просто работает.LINQ To Entities - изучите пространство имен System.Data.Objects . Особенно обратите внимание на
ObjectContext
. Это технология DataAccess, созданная командой ADO.NET. Он сложный, мощный и сложный в использовании, чем LINQ To SQL.LINQ To XML - изучите пространство имен System.Xml.Linq . По сути, люди не были довольны тем, что там было
System.Xml
. Поэтому Microsoft переписала его и воспользовалась преимуществами переписывания, чтобы ввести некоторые методы, которые упрощают использование LINQ To Objects против XML.Несколько хороших вспомогательных типов, таких как Func и Action . Эти типы являются делегатами с общей поддержкой. Прошли те времена, когда объявлялись ваши собственные (и не взаимозаменяемые) типы делегатов.
Все вышеперечисленное является частью .NET Framework и доступно на любом языке .NET (VB.NET, C #, IronPython, COBOL .NET и т. Д.).
Хорошо, перейдем к языковым возможностям. Я собираюсь придерживаться C #, потому что это то, что я знаю лучше всего. VB.NET также имеет несколько подобных улучшений (и пару, которую не получил C # - литералы XML). Это короткий и неполный список.
Методы расширения - это позволяет вам «добавить» метод к типу. Этот метод на самом деле является статическим методом, которому передается экземпляр типа и ограничен общедоступным контрактом типа, но он очень полезен для добавления методов к типам, которые вы не контролируете (строка), или добавления (полностью реализовано ) вспомогательные методы для интерфейсов.
Синтаксис понимания запросов - это позволяет писать в структуре типа SQL. Все это транслируется в методы в System.Linq.Queryable или System.Linq.Enumerable (в зависимости от типа myCustomers). Это совершенно необязательно, и вы можете хорошо использовать LINQ и без него. Одним из преимуществ этого стиля объявления запроса является то, что переменные диапазона имеют ограниченную область видимости: их не нужно повторно объявлять для каждого предложения.
Лямбда-выражения - это сокращение для указания метода. Компилятор C # переведет каждый из них либо в анонимный метод, либо в истинный
System.Linq.Expressions.Expression
. Вам действительно нужно понимать это, чтобы хорошо использовать Linq. Он состоит из трех частей: списка параметров, стрелки и тела метода.Анонимные типы. Иногда у компилятора достаточно информации, чтобы создать для вас тип. Эти типы не являются действительно анонимными: компилятор называет их, когда создает. Но эти имена создаются во время компиляции, а разработчику уже слишком поздно использовать это имя во время разработки.
Неявные типы. Иногда компилятор получает достаточно информации от инициализации, чтобы определить тип за вас. Вы можете указать компилятору сделать это с помощью ключевого слова var. Неявная типизация требуется для объявления переменных для анонимных типов, поскольку программисты не могут использовать имя анонимного типа.
источник
LINQ (Language INtegrated Query) может относиться к:
библиотека для манипулирования коллекциями и итераторами, которая широко использует функции высшего порядка в качестве аргументов (System.Linq)
библиотека для передачи и управления простыми функциями как абстрактными синтаксическими деревьями (System.Linq.Expressions)
расширение синтаксиса для различных языков, чтобы обеспечить синтаксис, более похожий на SQL, для обработки коллекций, более компактную нотацию для анонимных функций и механизм для введения статических вспомогательных функций, синтаксически неотличимых от конечных функций-членов
определение интерфейса, которому могут соответствовать поставщики данных, чтобы получать структуру запроса и потенциально выполнять оптимизацию, или иногда сами совместимые поставщики данных
Компоненты можно использовать по отдельности или вместе.
источник
Короче говоря, LINQ (Language-Integrated Query) позволяет писать запросы прямо в коде. Эти запросы могут относиться к реляционным базам данных, а также к объектам XML или контейнерам в памяти, таким как массивы и списки. Дополнительная информация доступна в библиотеке MSDN: http://msdn.microsoft.com/en-us/library/bb308959.aspx
источник
Я попытаюсь дать простой ответ: LINQ - это способ запроса вашей базы данных (или другого хранилища данных, XML и т. Д.) С использованием языка запросов, который похож на SQL, но может быть скомпилирован внутри приложения .NET.
источник
From Where Select, etc.
- то есть он должен быть написан так, как фактически формируется набор результатовLINQ расшифровывается как Language Integrated Query и представляет собой способ предоставления механизма «запросов» общего назначения в CLR.
На самом базовом уровне он состоит из набора методов IEnumerable <T> - например, Select, Sum, Where - которые могут использоваться для ограничений, проекций и т. Д. [1]
Чтобы пойти дальше, LINQ также определяет новую модель поставщика LINQ, которая может принимать дерево выражений и использовать его для выполнения «собственных» запросов к источнику данных вне среды CLR, например, LINQ to SQL, LINQ to XML, LINQ. в NHibernate и т. д.
C # и VB.NET также определили синтаксис запроса, который позволяет вам писать строго типизированные запросы в строке (которые очень похожи на SQL), которые компилятор затем переводит в эквивалентные вызовы IEnumerable <T>.
Для меня самое интересное в LINQ - это то, что все функции C # и VB.NET, необходимые для его поддержки, полезны сами по себе. Для поддержки LINQ требовались методы расширения, анонимные типы, лямбда-выражения и неявная типизация, но мы склонны использовать эти функции вне чистого контекста LINQ.
[1] Это реляционные термины, функциональные программисты, вероятно, предпочтут Map, Reduce, Fold и т. Д.
источник
LINQ - это технология извлечения данных с использованием идиомы, заимствованной из языка программирования C #. Хотя функциональным дизайном он во многом обязан SQL, по сути, это собственный язык запросов к данным. Он работает с широким спектром источников данных (базы данных SQL, представления в памяти, XML и т. Д.). LINQ-To-SQL, в частности, следует рассматривать как контраст с традиционным использованием встроенного SQL, который страдает от того, что часто называют «несоответствием импеданса» между программированием SQL и программированием на C # / VB.
Для обсуждения LINQ и его ограничений вы можете взглянуть на этот связанный вопрос: не упускает ли LINQ to SQL главное?
источник
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx
«Проект LINQ - это кодовое имя для набора расширений .NET Framework, которые охватывают интегрированные в язык операции запроса, задания и преобразования. Он расширяет C # и Visual Basic синтаксисом на собственном языке для запросов и предоставляет библиотеки классов, позволяющие использовать преимущества эти возможности ".
источник