2017-01-04 4 views
0

Ich versuche, C# -Code zu VB.Net aber nicht in der Lage zu finden Lösungsausbeute Return Äquivalent von C# in Vb.NETWie IEnumerable Datentabelle in VB.NET zurückzukehren

Ich Iterieren über die Datentabelle zu konvertieren. Ein Ansatz, den ich gefunden habe, besteht darin, die Liste zu verwenden, um über die Datatable-Zeilen zu iterieren. Aber auch hier muss die Liste in Datentabelle konvertiert werden. Welcher Ansatz ist also erforderlich, um die Datentabelle in VB.NET zurückzugeben? Hier

ist VB.NET mein Code:

Public Function GetFileData(ByVal sourceFileFullName As String, ByVal dt1 As System.Data.DataTable, ByVal RowCount As Integer) As IEnumerable(Of System.Data.DataTable) 

    Dim con As New SqlConnection 
    Dim cmd As New SqlCommand 


    con.ConnectionString = Convert.ToString(System.Configuration.ConfigurationManager.ConnectionStrings("con1").ConnectionString) 

    Dim chunkRowCount As Integer = 0 
    Dim Row As String 

    Using sr As StreamReader = New StreamReader(sourceFileFullName) 

     While Not (Row = sr.ReadLine()) = "" 

      If Not RowCount = 0 Then 
       chunkRowCount = chunkRowCount + 1 
        //var chunkDataTable = ; //Code for filling datatable or whatever 
       dt1.Rows.Add() 

       Dim i As Integer = 0 
       Dim Cell As String 
        For Each Cell in Row.Split(',') 

        If (String.IsNullOrEmpty(Cell)) Then 

         dt1.Rows(dt1.Rows.Count - 1)(i) = DBNull.Value 
         i = i + 1 

        ElseIf Cell = "00.00.0000" Then 

         dt1.Rows(dt1.Rows.Count - 1)(i) = DBNull.Value 
         i = i + 1 

        Else 

         dt1.Rows(dt1.Rows.Count - 1)(i) = Cell 
         i = i + 1 
        End If 
       Next 
      End If 

      RowCount = RowCount + 1 

      If chunkRowCount = 10000 Then 

       chunkRowCount = 0 
       Yield return dt1 
       dt1.Clear() 
      End If 

     End While 

    End Using 

    If dt1.Rows.Count > 0 Then 
     yield return dt1 

    End If 
End Function 

C# Code:

public static IEnumerable<System.Data.DataTable> GetFileData(string sourceFileFullName, System.Data.DataTable dt1, int RowCount) 
    { 
     var con = ConfigurationManager.ConnectionStrings["con1"].ConnectionString.ToString(); 
     var connection = new SqlConnection(con); 

     int chunkRowCount = 0; 

     string Row; 

     using (var sr = new StreamReader(sourceFileFullName)) 
     { 

      //Read and display lines from the file until the end of the file is reached.     
      while ((Row = sr.ReadLine()) != null) 
      { 
       if (RowCount != 0) 
       { 
        chunkRowCount++; 
        //var chunkDataTable = ; //Code for filling datatable or whatever 
        dt1.Rows.Add(); 

        int i = 0; 

        foreach (string Cell in Row.Split(',')) 
        { 
         if (String.IsNullOrEmpty(Cell)) 
         { 
          dt1.Rows[dt1.Rows.Count - 1][i] = DBNull.Value; 
          i = i + 1; 
         } 
         else if (Cell == "00.00.0000") 
         { 
          dt1.Rows[dt1.Rows.Count - 1][i] = DBNull.Value; 
          i = i + 1; 
         } 
         else 
         { 
          dt1.Rows[dt1.Rows.Count - 1][i] = Cell; 
          i = i + 1; 
         } 
        } 

       } 
       RowCount = RowCount + 1; 

       if (chunkRowCount == 10000) 
       { 
        chunkRowCount = 0; 
        yield return dt1; 
        dt1.Clear(); // = null; 
       } 

      } //end while 


     } 

     //return last set of data which less then chunk size 
     if (dt1.Rows.Count > 0) 
      yield return dt1; 
    } 
+0

Mögliches Duplikat von [Was ist die äquivalente Syntax in VB.NET für "yield return"?] (Http://stackoverflow.com/questions/2912851/what-is-the-äquivalent-syntax-in-vb-net -für-Rendite-Rückkehr) –

+0

Wha Versuchst du es zu tun? Der von Ihnen gepostete Code versucht, dieselbe Tabelle mehrmals zurückzugeben. Eine Tabelle, die * bereits * für den Aufrufer verfügbar ist, da der Aufrufer sie als Parameter zur Verfügung stellt. Warum etwas zurückgeben? Wenn Sie etwas zurückgeben müssen, geben Sie einfach die Tabelle wie folgt zurück: –

+0

Von Matteo Maqrciano: Sie können den Modifizierer [Iterator] (https://msdn.microsoft.com/en-us/library/hh156569.aspx) in der Funktion verwenden Erklärung, um Yield in VB.NET –

Antwort

1

Sie können das Iterator Modifikator in der Funktionsdeklaration der Lage sein, verwenden Yield in VB.NET

+0

Die Methode ist bereits ein Iterator, aber es macht einfach keinen Sinn. Die Methode gibt dieselbe Tabelle, die sie als Parameter erhalten hat, immer wieder zurück. Wie auch immer, dies sollte ein Kommentar sein, keine Antwort –

+0

Die VB-Version ** ist NICHT ** eine Iterator-Funktion in der gleichen Weise wie die C# ist. Außerdem habe ich nicht genug Reputation, um Kommentare zu meinen Antworten hinzuzufügen. Prost –

+0

Wenn Sie nicht den Vertreter haben, warten Sie, bis Sie es tun. Die Regel ist aus einem bestimmten Grund da. Neue Benutzer sollten sich zuerst mit der Site vertraut machen. SO ist eine Q & A-Site, kein Diskussionsforum. Wenn etwas nicht ein gutes A sein kann, sollte es überhaupt kein A sein. In der Tat, diese Antwort * sollte * gelöscht werden, es ist sogar eine der Optionen, wenn eine Antwort zum Löschen markiert wird. Andernfalls werden sie bald downvoted –

Verwandte Themen