2016-05-02 31 views
-2

我在用LINQ創建的C#中創建了一個私有字符串,該字符串返回在XML文件中找到的值。我需要將其轉換爲VB.Net函數。我用C# converter嘗試過,但它不起作用。將C#私有字符串轉換爲VB.Net函數

你能幫我嗎?

這是代碼。

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

這裏是VB代碼,我從自動代碼轉換得到:

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 

的錯誤是在SELECT NEW

報表和標籤都沒有選擇的情況下之間有效和第一種情況

+1

你能顯示由此產生的VB代碼是什麼,並解釋哪部分不起作用以及錯誤信息是什麼? –

+0

@RoccoTateo,返回一個字符串的私有方法vs私有字符串變量之間有區別..你需要編輯這個問題也許並問'如何將此C#方法轉換成VB功能' – MethodMan

回答

2

沒有看到什麼您已將其轉換爲,很難看出錯誤在哪裏。

這裏是我手動轉換爲你:

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 

編譯沒有對我這麼試試看。

+0

謝謝,但在語句選擇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))。值得說我期待'結束選擇'。如果我把'結束選擇'我有同樣的錯誤'預期的結束語句。 –

+0

@RoccoTateo它聽起來像你的編譯器認爲你正在試圖做select case語句。如果你想在你的代碼上使用LINQ查詢,我建議看看這個,看看它是如何格式化的:https://msdn.microsoft.com/en-us/library/bb763068.aspx –

1

再次,我只是在這裏張貼VB相當於因爲網上轉換器不開始處理這種類型的代碼,所以在光這是一個合理的問題:

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