I'm not sure about C#.
I do know, however, that you can write VB LINNQ code w/out the 3.5 libraries as long as you use the VS 2008 compiler to target the 2.0 framework.
You will, however, have to implement some of the LINQ methods your self.
LINQ uses a syntatic transformation to translate queries into executable code. Basically, it will take code like this:
dim q = from x in xs where x > 2 select x*4;
and convert it into code like this:
dim q = xs.where(function(x) x > 2).select(function(x) x * 4);
For the LINQ functionality that ships with the 3.5 framework, those methods are implemented as extension methods on either IEnumerable or IQueryable (there's also a bunch of methods that work on data sets too).
The default IEnumerable extension methods are defined in System.Linq.Enumerable and look like this:
<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
The IQueryable extension methods take expressions trees as arguments, rather than lambdas. They look like this:
<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
The expression tree versions enable you to get a tree representation of the expressions provided to the clauses which can then be used to generate SQL code (or what ever else you want).
You could probably create your own version of LINQ to objects in about a day or so. It's all pretty straight forward.
If you want to use DLINQ, then things would be a little bit more difficult.