【问题标题】:I need help converting VB.Net Linq to C# Linq我需要帮助将 VB.Net Linq 转换为 C# Linq
【发布时间】:2012-02-23 00:33:17
【问题描述】:

我最近从 VB 切换到 C#,并且在大多数情况下,能够轻松完成转换。目前,我正在将一个 VB.Net 程序转换为 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 = group;

我已尝试使用搜索中的示例来解决此问题,但未能正确解决。那应该怎么转换?

【问题讨论】:

  • 如果您能说出您想要实现的目标,而不仅仅是 VB 的样子,那将会有所帮助。
  • 您可能会发现this VB.NET 到 C# 转换器在您的转换过程中很有帮助。
  • 对不起乔恩。我试图将行按一列分组。塞缪尔感谢您的链接。我没有使用过那个特定的转换器,但我尝试过的大多数转换器都不能很好地完成 Linq。不过谢谢,我会试试看的。

标签: c# vb.net linq


【解决方案1】:

有两个问题:

  • 查询语法不正确
  • 您正在尝试直接使用DataTableDataTable 没有实现 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;

在您的代码中,这样它就会从DataTableExtensions 中提取AsEnumerable

【讨论】:

  • AsEnumerable 在 VB.NET 中不需要在 DataTable 上,我认为编译器会为您完成。
  • @TimSchmelter:是的,而它在 C# 中。
【解决方案2】:

检查一下:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-24
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    相关资源
    最近更新 更多