2010-11-04 19 views
8

Nunca antes había usado LINQ, y aparece un error en una aplicación que sí lo usa. Este es un proyecto VB.NET (.NET 2.0) en Visual Studio 2008.Importaciones y referencias necesarias para utilizar LINQ

Aquí está el código erróneo:

Dim orderedRows = From r In resultRows Order By r.FIELDNAME Select r 

Y aquí está el error (nombres cambiados a algo genérico, pero por lo demás exacta) :

Expression of type '1-dimensional array of 
Company.OurLibrary.FunctionalArea.Library.StoredProcStuff.USP_MYPROC.ResultRow' 
is not queryable. Make sure you are not missing an assembly 
reference and/or namespace import for the LINQ provider. 
C:\project\filename.vb 

Así que reconozco que necesito importar bibliotecas LINQ. This link me llevó a agregar "Imports System.Linq" al archivo, pero esa es una referencia no resuelta. Basado en el mismo enlace, pensé que necesitaba agregar una referencia a "System.Core" a mi proyecto, pero no aparece como una opción disponible cuando trato de agregar una referencia (ni está ya marcado).

Estoy seguro de que me falta algo básico. ¿Alguien me puede apuntar en la dirección correcta?

TL; DR: ¿Qué necesito para LINQ para trabajar?

+0

Entonces, si tiene el conjunto de destino configurado en .Net3.0 o superior, ¿el sistema tiene instalado .NET 3.0 o posterior? De lo contrario, ¿no puedes agregarlo a las referencias del proyecto? – jcolebrand

+0

@drachenstern: El sistema tiene .NET 3.5 instalado, y 4.0 también, para el caso. Pero el objetivo para esta aplicación es 3.5. – JosephStyons

+0

¿Qué quiere decir con "VB.NET (versión 2.0)"? La versión de VB enviada con VB 2008 fue VB 9, no 2 (VB2 se ejecutó en DOS). –

Respuesta

8

Actualización: en base a los comentarios dirigidos .NET 2.0 y que intentan usar System.Linq daría lugar a un error de compilación de la siguiente manera:

Namespace or type specified in the Imports 'System.Linq' doesn't contain any public member or cannot be found.

Para cambiar la versión del marco orientado vaya a Propiedades del proyecto - > Compilar -> Opciones de compilación avanzadas ... establezca el Marco de destino en ".NET Framework 3.5" y vuelva a compilar.

En caso de que el uso de .NET 3.5 no sea factible, entonces puede usar LINQBridge para hacer uso de LINQ to Objects mientras se dirige al framework .NET 2.0.

+0

@Ahmad Mageed: gracias por el consejo. Las tres de esas Importaciones me dan este error: espacio de nombres o tipo especificado en Imports 'System.Linq' no contiene ningún miembro público o no se puede encontrar. No veo que System.Data.DataSetExtensions esté disponible para referencia, aunque sí tengo ese archivo .DLL en mi sistema en "C: \ Archivos de programa (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.5" – JosephStyons

+0

@ Joseph, ¿estás seguro de que estás compilando contra .NET 3.5? Vaya a Propiedades de su proyecto -> Compilar -> Opciones de compilación avanzadas ... ¿está el Marco de objetivos establecido en ".NET Framework 3.5"? –

+1

@Joseph Pude obtener un mensaje idéntico al orientar .NET 2.0 con 'Imports System.Linq' incluido. La orientación .NET 3.5 funcionó bien para mí. En este punto, estoy bastante seguro de que 'System.Data.DataSetExtensions' no está relacionado con este problema. –

Cuestiones relacionadas