2010-10-16 20 views
28

Soy nuevo en LINQ y estoy tratando de consultar mi DataSet con él. Así que seguí al this example al pie de la letra, y no funciona.LINQ to DataSet, DataTable.AsEnumerable() no reconocido

Sé que mi DataTable necesita el .AsEnumerable en el extremo, pero no es reconocido por el IDE. ¿Qué estoy haciendo mal? ¿Me falta una referencia/importación que no se muestra en el ejemplo (no sería la primera vez que un ejemplo de MSDN no era del todo correcto) y, de ser así, cuál? ¿O es algo completamente diferente?

Código de ejemplo:

Imports System 
Imports System.Linq 
Imports System.Linq.Expressions 
Imports System.Collections.Generic 
Imports System.Data 
Imports System.Data.SqlClient 
Imports System.Data.Common 
Imports System.Globalization 


//Fill the DataSet. 
Dim ds As New DataSet() 
ds.Locale = CultureInfo.InvariantCulture 
//See the FillDataSet method in the Loading Data Into a DataSet topic. 
FillDataSet(ds) 

Dim products As DataTable = ds.Tables("Product") 

Dim query = From product In products.AsEnumerable() _ 
      Select product 
Console.WriteLine("Product Names:") 
For Each p In query 
    Console.WriteLine(p.Field(Of String)("Name")) 
Next 

Las referencias en mi proyecto son:

System 
System.Data 
System.Drawing 
System.Windows.Forms 
System.Xml 

Respuesta

74

Mientras que la clase que sostiene las extensiones se encuentra en el espacio de nombres System.Data, que está situado en una asamblea que no se agrega al proyecto de manera predeterminada. Agregue una referencia a System.Data.DataSetExtensions a su proyecto y debería estar bien. Recuerde que, incluso después de haber agregado la referencia, cualquier clase que espera usar los métodos de extensión definidos en la clase también deberá tener una instrucción using para System.Data.

+0

Gracias, eso funciona ahora! Me he estado arrancando el pelo en esta. :) +1 a todos para System.Data.DataSetExtensions, pero obtienes el 'aceptar' para una explicación mucho mejor. Gracias de nuevo. – GSTD

+0

¿Por qué todavía hay una necesidad de agregar una declaración de uso incluso si ya está incluida en las referencias del proyecto? – Charmie

+0

@Charmie la declaración 'using' hace que el espacio de nombres esté disponible en el archivo/clase. Debido a que es un método de extensión, no puede hacer referencia a él utilizando el espacio de nombres completo (cuando se usa como una extensión) y, por lo tanto, debe tener el espacio de nombres incluido. – tvanfosson

8

Creo que es posible que tenga que añadir System.Data.DataSetExtensions referencia a su proyecto antes de la AsEnumerable va a funcionar.

5

necesita una referencia a System.Data.DataSetExtensions