2009-04-02 3 views
1

Ich habe eine Tabelle mit vielen Werten darin, die einfache Anführungszeichen um sie herum haben könnte. Ich muss eine doppelte Tabelle ohne diese einfachen Anführungszeichen erstellen. Ich kann die ursprüngliche Tabelle nicht ändern, da ich sie später verwenden muss.Entfernen von einzelnen Anführungszeichen aus allen Zellen in einer DataTable - Erstellen neuer Tabelle - Verwenden von LINQ in Vb.Net

Ich habe dies mit einer Tabelle getan.Clone und mit einer Foreach, um durch die Zeilen und Spalten durch die einzelnen Anführungszeichen zu entfernen, wie ich brauche und dann diese neue Zeile in die neue Tabelle setzen. Es funktioniert und es ist einfach ..... aber

Ich würde gerne die gleiche Sache mit LINQ tun. Dies war mein Versuch ....

 Dim myResults = From myRow In dtTable _ 
        From myItem In myRow.ItemArray _ 
        Where TypeOf myItem Is String AndAlso _ 
        myItem.ToString.StartsWith("'"c) AndAlso _ 
        myItem.ToString.EndsWith("'"c) 

Wie man sehen kann - ich nicht sehr weit war. Ich hatte Probleme, Beispiele zu finden, die keine bestimmte Spalte in der DataRow betrachteten. Es sieht so aus, als ob mein Code alle übereinstimmenden Ergebnisse zurückzieht - aber ich bin im Nachteil, wie ich eine doppelte Tabelle erstellen/die Werte ändern kann?

EDIT - Ich habe ein Kopfgeld dafür in der Hoffnung gestartet, dass jemand eine Lösung bereitstellen kann. Die einzige Voraussetzung ist, kein For Each zu verwenden; wie ich das schon kann. Ich bin näher gekommen - aber ich kann immer noch nicht eine neue Reihe oder einen neuen Tisch erstellen.

Mein neuer Ansatz trifft auf eine Sackgasse, wenn ich versuche, dies zu tun:

Dim MyNewRow As New Data.DataRow With {.ItemArray = myRemovedQuotes.ToArray} 

Die Fehlermeldung, die ich sagt bekommen, „Fehler 1‚System.Data.DataRow.Protected Freund Sub New (Builder als System.Data.DataRowBuilder) 'ist in diesem Kontext nicht zugänglich, da es' Protected Friend 'ist. "

+0

Bitte sagen Sie mir, Sie tun dies nicht in einem Versuch, sql Injektion zu verhindern! Es ist nur der falsche Weg, um darüber zu gehen. –

+0

Nein - nichts davon wird in eine SQL-Zeichenfolge übergeben. –

+0

Ich habe eine Antwort in C# gepostet, aber gelöscht, indem ich das VB.NET-Tag gesehen habe; Das Problem besteht darin, das Objekt [] zu konvertieren, während jede Zeile getrennt bleibt. Ich habe im Beispiel Array.ConvertAll verwendet. –

Antwort

1

Wenn Sie wirklich Muss Verwendung LINQ (als Lernübung, vielleicht), dann vielleicht so etwas wie unten (wie C#, meine VB ist bei weitem nicht, um es zu übersetzen, fürchte ich):

 DataTable clone = original.Clone(); 
     string t; 
     var qry = from DataRow row in original.Rows 
        let arr = row.ItemArray 
        select Array.ConvertAll(arr, s => 
         (t = s as string) != null 
         && t.StartsWith("\'") 
         && t.EndsWith("\'") ? t.Trim('\'') : s); 
     foreach (object[] arr in qry) { 
      clone.Rows.Add(arr); 
     } 

Das Problem ist, dass die ItemArray erweitert werden muss, während die separaten Zeilen beibehalten (so ist keine Option); Array.ConvertAll scheint der einfachste Weg.

1

Wird Ihre Tabelle lokal (dh innerhalb der App) oder aus einer Datenbank generiert - wenn ich aus der Datenbank eine Ansicht schreiben würde, die die einfachen Anführungszeichen entfernt, bevor sie Ihre App erreichen.

+0

Es wird lokal generiert. –

Verwandte Themen