Я не уверен насчет 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, то все будет немного сложнее.