我受到了我希望是一個簡單問題的困擾。我試圖嵌入一個簡單的公式來遞增一個變量,以充當XML文檔的「行號」。在Visual Basic中編寫文字XML。下面的代碼是什麼樣子:Visual Basic XML Literals嵌入式表達式 - 我可以做簡單的數學嗎?
<%= From d In orderData
Select <ItemOut quantity=<%= d.OrderQuantity %> lineNumber=<%= i %>>
<ItemID>
<SupplierPartID><%= d.VendorPartNo %></SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD"><%= d.PricePerPackage %></Money>
</UnitPrice>
<Description xml:lang="en"><%= d.Description %></Description>
<UnitOfMeasure><%= d.OrderUOM %></UnitOfMeasure>
</ItemDetail>
<%= i = i + 1 %>
</ItemOut>
%>
我期待d的每一次迭代中OrderData打勾+ 1,但是,它簡單地返回「假」。看到輸出XML在這裏:
<ItemOut quantity="1" lineNumber="1">
<ItemID>
<SupplierPartID>99999</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">0.00</Money>
</UnitPrice>
<Description xml:lang="en">Tub and Tile Caulk Biscuit</Description>
<UnitOfMeasure>cs</UnitOfMeasure>
</ItemDetail>false</ItemOut>
<ItemOut quantity="1" lineNumber="1">
<ItemID>
<SupplierPartID>999999</SupplierPartID>
</ItemID>
<ItemDetail>
<UnitPrice>
<Money currency="USD">0.00</Money>
</UnitPrice>
<Description xml:lang="en">Tub and Tile Caulk Almond</Description>
<UnitOfMeasure>cs</UnitOfMeasure>
</ItemDetail>false</ItemOut>
是否有可能做這種事情?我甚至嘗試打電話給一個功能,而不是:
lineNumber=<%= incrementI(i) %>>
但是,這也導致「錯誤」作爲輸出。我在這裏錯過了什麼? 非常感謝您的幫助!
的Visual Studio 2013
Edit-- 這裏我指的功能:
Private Function incrementI(i As Integer)
Return i = i + 1
End Function
這就是我期望的內聯版本;請記住,VB對* assignment *和* comparison *使用'=',並且使用哪個取決於它是*語句*還是*表達式*的上下文 - 並且由於它試圖形成一個表達式,所以它會比較'我'與'我+ 1'並得出結論,他們不相等。不能說沒有看到你如何定義函數的函數。 – 2015-02-10 13:20:03
私有函數incrementI(i As Integer) 返回i = i + 1 結束函數 – Stefan 2015-02-10 13:54:28
是的,您再次在需要* expression *的上下文中使用它,因此它將執行比較。如果你已經定義了函數的返回類型,那麼編譯器會幫助解決這個問題。而且,因爲該參數不是通過引用傳遞的,所以它也不會有任何副作用(所以外部代碼中的「i」保留函數調用之前的任何值)。 – 2015-02-10 13:57:44