Aquí podría ser tu PUBLICIDAD


LINQ en .NET 2.0 Runtime

votos
53

¿Se puede ejecutar una aplicación LINQ habilitada en una máquina que solo tiene instalado el tiempo de ejecución de .NET 2.0?

En teoría, LINQ no es más que azúcar sintáctica, y el código IL resultante debería tener el mismo aspecto que en .NET 2.0.

¿Cómo puedo escribir LINQ sin usar las librerías .NET 3.5? ¿Funcionará en .NET 2.0?

Publicado el 05/08/2008 a las 13:03
fuente por usuario urini
En otros idiomas...        العربية       

9 respuestas

votos
76

Es extraño que nadie haya mencionado LINQBridge . Este pequeño y asombroso proyecto es un respaldo de LINQ (IEnumerable, pero sin IQueryable) y sus dependencias (Func, Action, etc.) a .NET 2.0. Y:

Si su proyecto hace referencia a LINQBridge durante la compilación, se vinculará con los operadores de consulta de LINQBridge; si hace referencia a System.Core durante la compilación, se vinculará a los operadores de consulta de Framework 3.5.

Respondida el 27/12/2008 a las 03:51
fuente por usuario Mauricio Scheffer


Aquí podría ser tu PUBLICIDAD


votos
32

Hay algunos "Hacks" que implican el uso de un System.Core.dll desde el Framework 3.5 para que se ejecute con .net 2.0, pero personalmente no me gustaría utilizar una base tan inestable.

Vea aquí: Soporte de LINQ en .NET 2.0

  1. Crea una nueva aplicación de consola
  2. Mantenga solo System and System.Core como ensambles a los que se hace referencia
  3. Establezca Copy Local en true para System.Core, porque no existe en .NET 2.0
  4. Use una consulta LINQ en el método Principal. Por ejemplo, el de abajo.
  5. Construir
  6. Copie toda la salida de bin a una máquina donde solo está instalado .NET 2.0
  7. correr

(Requiere .net 2.0 SP1 y no tengo idea si agrupa el System.Core.dll viola el EULA)

Respondida el 05/08/2008 a las 01:07
fuente por usuario Michael Stum

votos
11

En teoría sí, siempre que distribuya los ensamblados específicos de LINQ y cualquier dependencia. Sin embargo, eso es una violación de las licencias de Microsoft. Scott Hanselman escribió una publicación en el blog sobre Implementación de ASP.NET MVC en ASP.NET 2.0, que es similar a lo que usted desea hacer.

Respondida el 05/08/2008 a las 01:07
fuente por usuario John Downey

votos
7

Puede utilizar las fuentes de LINQ de mono (.NET para Linux) para obtener LINQ se ejecuta en .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

Alguien lo ha hecho aquí:
LINQ para .NET 2.0

Respondida el 04/03/2011 a las 07:51
fuente por usuario Stefan Steiger

votos
6

Respuesta corta:

  • LINQ to Objects: yes ( IEnumerable<T>)
  • LINQ to SQL / Entities: no ( IQueryable<T>)
  • LINQ a XML / DataSets: ¿todavía no?

Consulte esta pregunta acerca de las funciones de .Net 3.5 disponibles de forma automática o con poco esfuerzo cuando se trata de .Net 2.0 desde VS2008.

Básicamente, cualquier cosa que sea solo "azúcar de sintaxis" y los nuevos compiladores (C # 3.0, VB 9.0) emitan como IL compatible con 2.0 funcionará. Esto incluye muchas características utilizadas por LINQ, como clases anónimas, lambdas como delegados anónimos, propiedades automáticas, inicializadores de objetos e inicializadores de colecciones.

Algunas características de LINQ utilizan clases, interfaces, delegados y métodos de extensión que viven en los nuevos ensamblados 3.5 (como System.Core.dll). La redistribución de estos ensamblajes es una violación de la licencia, pero podrían volverse a implementar. El uso de métodos de extensión solo necesita que declare un vacío System.Runtime.CompilerServices.ExtensionAttribute. LINQ to Objects se basa en IEnumerable<T>extensiones y varias declaraciones de delegado (the Action<T>y Func<T>families) y se han implementado en LINQBridge (como se menciona mausch ). LINQ to XML y LINQ to DataSets dependen de LINQ to Objects, que supongo que también podría implementarse para .Net 2.0, pero aún no lo he visto.

LINQ a SQL y LINQ a Entidades requiere muchas nuevas clases ( DataContext/ ObjectContext, un montón de atributos, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, etc) y la expresión de los árboles, que, aunque de alguna manera reimplementada, probablemente requerirán al menos SP1 .NET 2.0 para trabajar.

Respondida el 19/05/2009 a las 05:19
fuente por usuario Lucas

votos
5

No estoy seguro de C #.

Sin embargo, sé que puede escribir código VB LINNQ sin las bibliotecas 3.5 siempre que use el compilador VS 2008 para orientar el marco 2.0.

Sin embargo, tendrá que implementar algunos de los métodos LINQ usted mismo.

LINQ usa una transformación sintáctica para traducir consultas en código ejecutable. Básicamente, tomará un código como este:

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

y convertirlo en un código como este:

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

Para la funcionalidad LINQ que se envía con el marco 3.5, esos métodos se implementan como métodos de extensión en IEnumerable o IQueryable (también hay un montón de métodos que también funcionan en los conjuntos de datos).

Los métodos de extensión predeterminados de IEnumerable se definen en System.Linq.Enumerable y se ven así:

<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

Los métodos de extensión IQueryable toman árboles de expresiones como argumentos, en lugar de lambdas. Se ven así:

 <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

Las versiones del árbol de expresiones le permiten obtener una representación en árbol de las expresiones proporcionadas a las cláusulas que luego pueden usarse para generar código SQL (o lo que sea que desee).

Probablemente puedas crear tu propia versión de LINQ para objetos en aproximadamente un día más o menos. Todo es bastante directo.

Si quieres usar DLINQ, entonces las cosas serían un poco más difíciles.

Respondida el 10/10/2008 a las 10:30
fuente por usuario Scott Wisniewski

votos
3

No, porque si bien pensaste que LINQ es solo azúcar sintáctico, en realidad usó árboles de expresión en gran medida, una característica ausente en .NET 2.0.

Dicho esto, .NET 3.5 solo se construye sobre .NET 2.0, y esa es la razón por la cual el IL no se ve "diferente" o "especial".

No veo una razón por la que no deba simplemente instalar .NET 3.5 Framework. Todo .NET 2.0 funcionará bien, prometa :)

Respondida el 05/08/2008 a las 01:07
fuente por usuario Jon Limjap

votos
2

Por lo que yo sé, la biblioteca LINQ solo está disponible desde el framework 3.0. Si desea utilizar algo similar en el marco 2.0, deberá volver a escribirlo usted mismo :) o buscar una biblioteca de terceros similar. Solo encontré un poco de información aquí, pero tampoco me convenció.

Respondida el 05/08/2008 a las 01:14
fuente por usuario jdecuyper

votos
0

Puede utilizar linqbridge para .NET 2.0

Respondida el 25/03/2015 a las 08:05
fuente por usuario BrettWatts