Hey Leute, also bin ich auf etwas gestoßen, das vielleicht ein Fehler in der Extension-Methode .CopyToDataTable ist.Wie man mit einem Fehler in System.Data.DataTableExtensions.CopyToDataTable() umgehen kann
Diese Methode wird verwendet, indem (in VB.NET) System.Data.DataTableExtensions importiert und dann die Methode für ein IEnumerable aufgerufen wird. Sie würden dies tun, wenn Sie eine Datentabelle mit LINQ filtern und dann die DataTable am Ende wiederherstellen möchten.
heißt:
Imports System.Data.DataRowExtensions
Imports System.Data.DataTableExtensions
Public Class SomeClass
Private Shared Function GetData() As DataTable
Dim Data As DataTable
Data = LegacyADO.NETDBCall
Data = Data.AsEnumerable.Where(Function(dr) dr.Field(Of Integer)("SomeField") = 5).CopyToDataTable()
Return Data
End Function
End Class
In dem obigen Beispiel die "WHERE" Filterung möglicherweise keine Ergebnisse zurück. Wenn dies geschieht, löst CopyToDataTable eine Ausnahme aus, da keine DataRows vorhanden sind.
Warum?
Das sollte ein korrektes Verhalten eine Datatable mit Rows.Count zurückkehren = 0.
jemand eine saubere Abhilfe dazu in einer solchen Art und Weise denken, dass sich bewusst, wer CopyToDataTable ruft muss nicht sein dieses Problem?
System.Data.DataTableExtensions ist eine statische Klasse, so kann ich das Verhalten nicht überschreiben .... irgendwelche Ideen? Habe ich etwas verpasst?
prost
UPDATE:
ich dies als ein Problem zu Connect eingereicht haben. Ich würde noch einige Vorschläge mögen, aber wenn Sie mir zustimmen, könnten Sie das Problem bei Verbindung über den Link oben
prost
Ich denke, dass dies etwas verbessert werden könnte, um '! Source.Any()' anstelle von 'Source.Count() == 0' zu verwenden. 'Any' hört auf, sobald Ergebnisse gefunden werden. – row1
Viel mehr als leicht –
Dies ist kein Fehler; Das Verhalten ist sehr bewusst und bewusst.Eines der ersten Dinge, die 'CopyToDataTable' tut, ist eine Zeile zu suchen, die zugrunde liegende Tabelle zu finden und die Spalten in Ihre neue' DataTable' zu kopieren. Ihre Problemumgehung erstellt eine leere 'DataTable' ohne Spalten. Sie können damit in einer DataSource durchkommen (es wird nicht auf die Tabelle schauen, wenn es keine Zeilen hat), aber in anderen Szenarien können Sie nicht. – Brian