2010-07-13 3 views
5

Ich versuche, auf mehrere Spalten zu unterscheiden und Datarows aus Datentabelle zu bekommen. aber Fehler bekommen.erhalten eindeutige Zeilen aus Datentabelle mit Linq (deutlich mit mehrfachen Spalten)

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() 

unter Fehler:

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

möchte ich eine weitere Datentabelle mit unterschiedlichen Reihe basierend auf bestimmten Spalten von Source.

+0

Sie die deutliche Unterstützung in Datentabelle verwenden könnte - http://social.msdn.microsoft.com/forums/en-US/adodotnetdataset/thread/ed9c6a6a-a93e-4bf5-a892-d8471b84aa3b/ToTable() hat eine Überladung, mit der Sie angeben können, ob nur bestimmte Werte zurückgegeben werden sollen oder nicht, und ein Argument params string [], um anzugeben, welche Spalten in der neuen Tabelle enthalten sein sollen. –

Antwort

4

versuchen diese dann

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

Wie Benutzer 'Abfrage' Objekte. Ich meine, wie man das iteriert? – James123

0

starten (ein bisschen eine Vermutung von mir):

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

habe denselben Fehler, wenn Sie Ihre Abfrage ausführen – James123

+0

Ah Scheiße, ich hätte mehr Aufmerksamkeit auf die Fehlermeldung haben sollen. Ich habe es jetzt. Ihr Problem ist nicht Ihre SQL-Syntax - es ist der Datentyp, den Sie erwarten, da Sie es als eine Enumerable-Sammlung von DataRows markieren, wenn Sie Tupel projizieren, die ein Paar Zeichenfolgen enthalten. – Aaronontheweb

+0

Ändern Sie die Syntax so, dass Sie eine neue DataRow mit jeder der als Spalten hinzugefügten Strings projizieren - entweder das oder entfernen Sie As IEnumerable (Of DataRow) und akzeptieren Sie einfach den implict Typ als Ergebnis. – Aaronontheweb

0

dieses Versuchen

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

dies in C# ist. Wandeln es in vb.net

+0

Sie fehlen eine geschweifte Klammer an der Vorderseite Ihrer LINQ-Projektion, aber ich verstehe Ihre Bedeutung. – Aaronontheweb

+0

Dieser rettet keine bestimmten Spalten – James123

Verwandte Themen