2016-05-02 5 views
-2

Ich habe diese private Zeichenfolge in C# mit LINQ erstellt, die einen Wert in einer XML-Datei zurückgegeben. Ich muss dies in eine VB.Net-Funktion konvertieren. Ich habe es mit C# converter versucht, aber es funktioniert nicht.Konvertieren von C# privaten Zeichenfolge in VB.Net-Funktion

Können Sie mir bitte helfen?

Dies ist der Code.

private string ImportoXML(string PercorsoXML, string ID) 
{ 
    XElement xdoc = XElement.Load(PercorsoXML, LoadOptions.PreserveWhitespace); 
    string ns = xdoc.Name.Namespace.NamespaceName; 
    var elements = xdoc.Elements(XName.Get("PmtInf", ns)) 
        .Elements(XName.Get("DrctDbtTxInf", ns)); 
    var ElencoValori = from lv2 in elements 
          select new 
          { 
           PmtId = lv2.Element(XName.Get("DrctDbtTx", ns)) 
              .Element(XName.Get("MndtRltdInf", ns)) 
              .Element(XName.Get("MndtId", ns)).Value, InstdAmt 
              = lv2.Element(XName.Get("InstdAmt", ns)).Value; 
          }; 
    return ElencoValori.Where(c => c.PmtId.EndsWith(ID)).FirstOrDefault().InstdAmt.ToString(); 
} 

Hier ist die VB-Code, den ich von der automatischen Code-Konverter erhalten:

Private Function ImportoXML(ByVal PercorsoXML As String, ByVal ID As String) As String 
    Dim xdoc As XElement = XElement.Load(PercorsoXML, LoadOptions.PreserveWhitespace) 
    Dim ns As String = xdoc.Name.[Namespace].NamespaceName 
    Dim elements = xdoc.Elements(XName.[Get]("PmtInf", ns)).Elements(XName.[Get]("DrctDbtTxInf", ns)) 
    Dim ElencoValori = From lv2 In elements 
     SELECT NEW  
     { 
     PmtId = lv2.Element(XName.[Get]("DrctDbtTx", ns)).Element(XName.[Get]("MndtRltdInf", ns)).Element(XName.[Get]("MndtId", ns)).Value, 
     InstdAmt = lv2.Element(XName.[Get]("InstdAmt", ns)).Value 
     } 
     End Select 
    Return ElencoValori.Where(Function(c) c.PmtId.EndsWith(ID)).FirstOrDefault().InstdAmt.ToString() 
End Function 

Die Fehler sind in der SELECT NEW:

Statements und Etiketten sind nicht gültig zwischen dem Auswahl Fall und erster Fall

+1

Sie kann zeigen Sie, was der resultierende VB-Code war und erklären Sie, welcher Teil davon nicht funktioniert und was die Fehlermeldung ist? –

+0

@RoccoTateo, gibt es einen Unterschied zwischen einer privaten Methode, die eine Zeichenkette gegen eine private Zeichenkettenvariable zurückgibt. Sie müssen die Frage vielleicht redigieren und '' fragen, wie ich diese C# Methode in eine VB Funktion ' – MethodMan

Antwort

2

Ohne zu sehen was Sie haben es in konvertiert, es ist schwer zu sehen, wo die Fehler sind.

Hier ist, was ich konvertiert haben für Sie manuell:

Private Function ImportXML(PercorsoXML As String, ID As String) As String 

    Dim xdoc As XElement = XElement.Load(PercorsoXML, LoadOptions.PreserveWhitespace) 

    Dim ns As String = xdoc.Name.Namespace.NamespaceName 

    Dim elements = xdoc.Elements(XName.Get("PmtInf", ns)).Elements(XName.Get("DrctDbtTxInf")) 

    Dim ElencoValori = From lv2 In elements 
         Select PmtId = lv2.Element(XName.Get("DrctDbtTx", ns)) _ 
          .Element(XName.Get("MndtRltdInf", ns)) _ 
          .Element(XName.Get("MndtId", ns)).Value, InstdAmt _ 
          = lv2.Element(XName.Get("InstdAmt", ns)).Value 

    Return ElencoValori.Where(Function(c) c.PmtId.EndsWith(ID)).FirstOrDefault().InstdAmt.ToString() 

End Function 

Dieses feine kompiliert für mich so einen Versuch geben.

+0

danke aber in die Anweisungen Wählen Sie PmtId = lv2.Element (XName.Get ("DrctDbtTx", ns)) _ .Element (XName.Get ("MndtRltdInf", ns)) _ .Element (XName.Get ("MndtId", ns)). Value, InstdAmt _ = lv2.Element (XName.Get ("InstdAmt", ns)). Wert sagen Sie mir, dass erwartet 'Ende wählen'. Wenn ich 'end select' setze habe ich den gleichen Fehler 'end of statements erwartet. –

+0

@RoccoTateo Es klingt, als ob Ihr Compiler denkt, dass Sie versuchen, eine Case-Anweisung zu wählen. Wenn Sie versuchen, LINQ-Abfragen in Ihrem Code zu verwenden, empfehle ich, einen Blick darauf zu werfen, um zu sehen, wie es formatiert ist: https://msdn.microsoft.com/en-us/library/bb763068.aspx –

1

Noch einmal, ich bin Entsendung nur die VB äquivalent hier, weil der Online-Konverter nicht beginnen, diese Art von Code zu handhaben, so im Lichte dass dies eine vernünftige Frage:

Option Infer On 

Private Function ImportoXML(ByVal PercorsoXML As String, ByVal ID As String) As String 
    Dim xdoc As XElement = XElement.Load(PercorsoXML, LoadOptions.PreserveWhitespace) 
    Dim ns As String = xdoc.Name.Namespace.NamespaceName 
    Dim elements = xdoc.Elements(XName.Get("PmtInf", ns)).Elements(XName.Get("DrctDbtTxInf", ns)) 
    Dim ElencoValori = From lv2 In elements 
     Select New With { 
      Key .PmtId = lv2.Element(XName.Get("DrctDbtTx", ns)).Element(XName.Get("MndtRltdInf", ns)).Element(XName.Get("MndtId", ns)).Value, 
      Key .InstdAmt = lv2.Element(XName.Get("InstdAmt", ns)).Value; 
     } 
    Return ElencoValori.Where(Function(c) c.PmtId.EndsWith(ID)).FirstOrDefault().InstdAmt.ToString() 
End Function 
Verwandte Themen