2015-01-20 49 views
0

我想了解這個LINQ語句實際上在做什麼。我沒有LINQ的經驗,所以我試圖獲得一些「純英文」翻譯。VB.Net中的LINQ聲明 - 它在做什麼?

MyDataTable包含以下數據: OrderByValues,合同,PayType,PayAmount

Dim groupIDs = From r In myds.MyDataTable Select OBV = r.Item("OrderByValues"), PT = r.Item("PayType"), Contract = r("Contract") Distinct 
For Each r in groupIDS 
    a = r.OBV 
    b = r.PT 
    c = r.Contract 
Next 

我不知道是否有足夠的信息來幫助你出去與否。我會很感激任何幫助。

謝謝。

+0

linq語句在哪裏? – 2015-01-20 21:20:07

+0

從基礎開始,使用MSDN文檔... – 2015-01-20 21:20:12

回答

0

第一行創建一個查詢,該查詢將保存anonymous types的集合。該查詢尚未執行,因爲LINQ's deferred execution。這可以被細分成塊:

  • From r In myds.MyDataTabler定義爲IEnumerable的(通常爲陣列或列表))的單個元素myds.MyDataTable
  • Select OBV = r.Item("OrderByValues"), ... Distinct創建匿名類型具有屬性稱爲OBVPTContract和受讓人那些來自元素r的屬性值。

foreach循環實際上執行查詢並創建IEnumerable進行迭代。然後在此循環中,它重複將a,b,c設置爲查詢中定義的匿名類型的屬性。這似乎有點奇怪,因爲變量a,b,c只會記住爲其設置的最後一個值。

更多閱讀LINQ

+0

還有更多的代碼,我只是簡單地刪除了一堆。感謝所有評論。 – SimpleMan 2015-01-21 13:46:23

0

它從您的數據表中選擇所有「OrderByValues」,「PayType」和「Contract」列,忽略重複的行。

然後它遍歷結果集,並分別將這3個值分配給變量「a」,「b」和「c」。

+0

那麼PT = r.Item(「PayType」)與PT = r(「PayType」)相同嗎? – SimpleMan 2015-01-20 21:41:22

+0

@SimpleMan在VB中,是的。 'Item'是默認的索引器,VB允許你省略,因此'r(「PayType」)'實際上被編譯爲'r.Item(「PayType」)'。 – 2015-01-20 23:07:38

相關問題