2012-02-22 116 views
1

我最近從VB切換到C#,並且大部分能夠在沒有太多麻煩的情況下進行轉換。目前,我正致力於將VB.Net程序轉換爲C#,並且在包含Linq的幾個代碼塊中遇到了麻煩。我需要幫助將VB.Net Linq轉換爲C#Linq

這是代碼VB.Net行,我遇到的麻煩之一:

Dim emails = From em In dt Group By email = em(1) Into Emailers = Group 

我試圖做同樣的事情在C#這樣的:

var emails = 
    from em in dt 
    group emails = em[1] 
    into Emailers = group; 

我我在dt上得到了一個編譯錯誤,它說找不到源類型爲'System.Data.DataTable'的查詢模式的實現。'GroupBy'找不到。 VS也有整個進入Emailers =組的問題;

我試圖通過使用我的搜索示例來獲得此權限,但一直未能正確使用。應該如何轉換?

+1

這將有助於如果你能說你試圖實現的,而不僅僅是什麼VB樣子。 – 2012-02-22 16:24:27

+0

在您的轉換過程中,您可能會發現[this](VB.NET to C#轉換器)有幫助。 – 2012-02-22 16:25:03

+0

對不起喬恩。我試圖按一列對行進行分組。塞繆爾感謝您的鏈接。我沒有使用那個特定的,但我嘗試過的大多數轉換器都不會很好地完成Linq。不過,謝謝,我會試一試。 – 2012-02-22 16:34:07

回答

7

有兩個問題:

  • 查詢語法不正確
  • 你試圖直接使用DataTable; DataTable不實現IEnumerable<T>這就是爲什麼它在C#中失敗。 (據推測VB處理DataTable特別莫名其妙。)

我的VB是垃圾,特別是對LINQ,所以我不明白查詢 - 但它看起來你只是一個試圖組的行柱。如果是這樣的話,它是那樣簡單:

var emails = from em in dt.AsEnumerable() 
      group em by em[1]; 

甚至:

var emails = dt.AsEnumerable().GroupBy(em => em[1]); 

請確保您有:

using System.Data; 
在你的代碼

,這樣它會拿起AsEnumerableDataTableExtensions

+0

VB.NET中不需要DataTable上的'AsEnumerable',我想編譯器會爲你做。 – 2012-02-22 16:31:24

+0

@TimSchmelter:正確的,而它是在C#中。 – 2012-02-22 16:32:39

0

檢查:

var emails = 
    from em in dt.AsEnumerable() 
    group emails = em[1] 
    into Emailers = group;