2010-07-13 30 views
5

Estoy tratando de distinguir en varias columnas y obtener datarows de datatable. pero obteniendo un errorobtener filas distintas de datatable utilizando Linq (distinto con columnas múltiples)

Dim query As IEnumerable(Of DataRow) = 
      (From row As DataRow In SourceTable.AsEnumerable() _ 
      Select row.Field(Of String)("ColumnName1"), 
        row.Field(Of String)("ColumnName2")).Distinct() 

debajo de error:

Unable to cast object of type '<DistinctIterator>d__7a`1[System.String]' 
to type 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]'. 

quiero otra tabla de datos con la fila propio basado en columnas dados de SourceTable.

+0

se puede utilizar el soporte distinto en tabla de datos - http://social.msdn.microsoft.com/forums/en-US/adodotnetdataset/thread/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/ToTable() tiene una sobrecarga que le permite especificar si devolverá únicamente valores distintos, y un argumento params string [] para especificar qué columnas desea en la nueva tabla. –

Respuesta

4

prueba este continuación

Dim query = From q In (From p In dt.AsEnumerable() Select New With {.col1= p("ColumnName1"), .col2 = p("ColumnName2")}) Select q.col1, q.col2 Distinct 
+0

Cómo utilizar objetos de "consulta". Me refiero a cómo iterar eso? – James123

0

probar este (un poco de una conjetura de mi parte):

Dim query As IEnumerable(Of DataRow) = 
     (From row As DataRow In SourceTable.AsEnumerable().Distinct() _ 
     Select row.Field(Of String)("ColumnName1"), 
       row.Field(Of String)("ColumnName2")) 
+0

tiene el mismo error al ejecutar su consulta – James123

+0

Ah, mierda, debería haber prestado más atención al mensaje de error. Lo tengo ahora Su problema no es su sintaxis SQL: es el tipo de datos que espera, ya que lo está marcando como una colección Enumerable de DataRows cuando está proyectando tuplas que contienen un par de cadenas. – Aaronontheweb

+0

Cambie la sintaxis para que esté proyectando un DataRow nuevo con cada una de las cadenas agregadas como columnas, ya sea eso o quite el As IEnumerable (Of DataRow) y simplemente acepte el tipo implict como resultado. – Aaronontheweb

0

probar este

var distinctRows = (from DataRow dRow in dTable.Rows 
        select new col1=dRow["dataColumn1"],col2=dRow["dataColumn2"]}).Distinct(); 

esto es en C#. Convertirlo en vb.net

+0

Te falta una llave al frente de tu proyección LINQ, pero entiendo tu significado. – Aaronontheweb

+0

Éste no retiene columnas distintas – James123