2012-02-22 4 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; 

I я получаю ошибку компиляции на dt, которая говорит Не удалось найти реализацию шаблона запроса для типа источника 'System.Data.DataTable'. 'GroupBy' не найден. У VS также есть проблемы со всем в Emailers = group;

Я попытался получить это право, используя примеры из моего поиска, но не смог исправить это. Как это должно быть преобразовано?

+1

Это поможет, если вы могли бы сказать, что вы пытаетесь достичь, а не только то, что VB выглядит. –

+0

Вы можете найти [это] (http://www.developerfusion.com/tools/convert/vb-to-csharp/) Преобразование VB.NET в C# полезно в процессе конверсии. –

+0

Жаль Джон. Я пытался сгруппировать строки по одному столбцу. Самуэль благодарит за ссылку. Я не использовал этот конкретный, но большинство конвертеров, которые я пробовал, не очень хорошо делают Linq. Спасибо, однако, я попробую. –

ответ

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; 

в вашем коде, так что она будет забрать AsEnumerable от DataTableExtensions.

+0

'AsEnumerable' в DataTable не требуется в VB.NET, я думаю, что компилятор сделает это за вас. –

+0

@TimSchmelter: Правильно, тогда как он находится на C#. –

0

Проверьте это:

var emails = 
    from em in dt.AsEnumerable() 
    group emails = em[1] 
    into Emailers = group; 
Смежные вопросы