LINQ на среду выполнения .NET 2.0

голоса
53

Может LINQ включен приложение работать на машине, которая только была установлена ​​среда выполнения .NET 2.0?

В теории, LINQ это не более чем синтаксический сахар, и полученный IL-код должен выглядеть так же, как это было бы в .NET 2.0.

Как я могу написать LINQ без использования библиотек .NET 3.5? Будет ли это работать на .NET 2.0?

Задан 05/08/2008 в 13:03
источник пользователем
На других языках...                            


9 ответов

голоса
3

Нет, потому что в то время как вы думали, LINQ действительно просто синтаксический сахар, он на самом деле активно используется выражение деревья - функция отсутствует в .NET 2.0.

Это, как говорится .NET 3.5 только выстраивается поверх .NET 2.0, и это причина, почему IL не выглядит «другой» или «специальный».

Я не вижу причин, почему вы должны не просто установить .NET 3.5 Framework. Все .NET 2.0 будет нормально работать на нем, обещаю :)

Ответил 05/08/2008 в 13:07
источник пользователем

голоса
32

Есть некоторые «Хаки», которые включают с использованием System.Core.dll от 3.5 Framework, чтобы заставить ее работать с .NET 2.0, но лично я не хотел бы использовать такой несколько пошатнувшийся фундамент.

Смотрите здесь: LINQ поддержки на .NET 2.0

  1. Создайте новое консольное приложение
  2. Хранить только систему и System.Core как ссылочные сборки
  3. Установите Copy Local истина для System.Core, потому что не существует в .NET 2.0
  4. Использовать запрос LINQ в главном методе. Например, один ниже.
  5. строить
  6. Скопируйте все выходные бен к машине, где только установлен .NET 2.0
  7. Бег

(Требуется .NET 2.0 SP1 и я понятия не имею, если пакетирования в System.Core.dll нарушает лицензионное соглашение)

Ответил 05/08/2008 в 13:07
источник пользователем

голоса
11

В теории да, при условии вы распространяете конкретные сборки LINQ и любые зависимости. Однако это является нарушением лицензирования Microsoft. Скотт Hanselman написал в блоге о Развертывание ASP.NET MVC на ASP.NET 2.0 , который похож на то , что вы хотели сделать.

Ответил 05/08/2008 в 13:07
источник пользователем

голоса
2

Насколько я знаю , библиотека LINQ доступен только с рамки 3.0. Если вы хотите использовать что - то подобное в рамках 2.0, вам нужно будет rewritte сами :) или найти аналогичную сторонние библиотеки. Я только нашел немного информации здесь , но это не убедило меня ни.

Ответил 05/08/2008 в 13:14
источник пользователем

голоса
5

Я не уверен, что C #.

Я знаю, однако, что вы можете писать код VB LINNQ ж / из 3,5 библиотек до тех пор, пока вы используете компилятор VS 2008 для целевой базы 2.0.

Вы, однако, должны реализовать некоторые из методов LINQ вашей собственной личности.

LINQ использует облегченную запись преобразование для перевода запросов в исполняемый код. В основном, это займет примерно такой код:

dim q = from x in xs where x > 2 select x*4;

и преобразовать его в код, как это:

dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

Для функциональности LINQ, который поставляется с 3,5 рамки, эти методы реализованы как методы расширения на любой IEnumerable или IQueryable (есть также куча методов, которые работают на наборы данных, тоже).

IEnumerable методы расширения по умолчанию определены в System.Linq.Enumerable и выглядеть следующим образом:

<Extension()>
public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)

   'do the transformation...

end function

В IQueryable методы расширения принимать выражения деревьев в качестве аргументов, а не лямбды. Они выглядят следующим образом:

 <Extension()>
 public function Select(of T, R)(source as IQueryable<T>, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function

Варианты выражения дерева позволяют получить представление дерева выражений, предоставленных пунктами, которые затем могут быть использованы для создания SQL-кода (или что-либо еще вы хотите).

Вы могли бы создать свою собственную версию LINQ к объектам примерно через день или около того. Это все довольно прямо вперед.

Если вы хотите использовать DLinq, то все было бы немного сложнее.

Ответил 10/10/2008 в 22:30
источник пользователем

голоса
76

Это странно , что никто не упомянул LINQBridge . Этот маленький удивительный проект является портировать из LINQ (IEnumerable, но без IQueryable) и его зависимость (Func, действия и т.д.) в .NET 2.0. А также:

Если ваш проект ссылается LINQBridge во время компиляции, то он будет связываться с операторами запроса LINQBridge в; если он ссылается System.Core во время компиляции, то он будет связываться с операторами запросов Framework 3.5 в.

Ответил 27/12/2008 в 03:51
источник пользователем

голоса
6

Короткий ответ:

  • LINQ к объектам: да ( IEnumerable<T>)
  • LINQ к SQL / Entities: нет ( IQueryable<T>)
  • LINQ к XML / DataSets: пока нет?

Смотрите этот вопрос о .Net 3.5 функций , доступных автоматически или с небольшим усилием , когда ориентируетесь .Net 2.0 от VS2008.

В принципе, все, что только «Синтаксис сахара» и новые составителям (C # 3.0, VB 9.0) выделяют в виде 2,0-совместимый ИЛ будет работать. Это включает в себя множество функций, используемой LINQ, такие как анонимные классы, лямбды как анонимные делегаты, автоматические свойства, инициализаторы объектов и сбор инициализаторы.

Некоторые функции LINQ использовать классы, интерфейсы, делегаты и методы расширения , которые живут в новых 3,5 узлов (например, System.Core.dll). Перераспределение этих собраний является нарушением лицензии, но они могут быть переопределены. Использование методов расширения нужно только то , что вы объявляете пустой System.Runtime.CompilerServices.ExtensionAttribute. LINQ к объектам зависит от IEnumerable<T>расширений и несколько заявлений делегатов (в Action<T>и Func<T>семьях) и был реализованы в LINQBridge (как mausch упоминался). LINQ к XML и LINQ к DataSets полагаться на LINQ к объектам , которые я предполагаю , также могут быть реализованы для .Net 2.0, но я не видел это сделано.

LINQ к SQL и LINQ для лиц требует много новых классов ( DataContext/ ObjectContext, множество атрибутов, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>и т.д.) и выражение деревьев, которые, даже если каким - то образом переписана, вероятно , потребуется , по крайней мере .Net 2.0 SP1 для работы.

Ответил 19/05/2009 в 17:19
источник пользователем

голоса
7

Вы можете использовать источники LINQ из моно (.NET для Linux), чтобы получить LINQ, работающих на .NET 2.0.

IEnumerable<T> : yes 
IQueryable<T>  : yes
LINQ to XML : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore

Кто - то сделал это здесь:
LINQ для .NET 2.0

Ответил 04/03/2011 в 19:51
источник пользователем

голоса
0

Вы можете использовать linqbridge для .net 2.0

Ответил 25/03/2015 в 20:05
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more