【问题标题】:converting VB.Net Linq to C# Linq将 VB.Net Linq 转换为 C# Linq
【发布时间】:2013-04-01 13:48:42
【问题描述】:

试图将以下 VB.net Linq 转换为 C# Linq

Dim query =
    From row In dt.AsEnumerable
    Group row By G = New With {.Price = row.Field(Of Double?)("price")}.Price,
                  New With {.Cat = row.Field(Of Integer?)("category")}.Cat
                 Into ProductGroups = Group

我尝试了一些网站,但没有一个按预期工作。

【问题讨论】:

  • ,首先,Stackoverflow 不是代码转换器。但是,这里有一些转换问题。 IMO 不受欢迎。人们可能会建议您使用第三方转换器,例如 developerfusion.com/tools/convert/vb-to-csharp
  • @SonerGönül 尝试了我能找到的所有转换器,从这个我得到了line 1 col 2: EOF expected
  • @user1590636 - 看看这个线程 - stackoverflow.com/a/8472111/142822
  • @SonerGönül 虽然我同意 SO 不是代码转换器,但他已经尝试使用转换器并且遇到了问题。现在,如果其他人犯了同样的错误,他们就有了可以给他们一些想法的地方。一个关于使用代码转换器的问题(即使它不是这样表述的)与关于 Visual Studio IMO 的问题一样有效。

标签: c# vb.net linq


【解决方案1】:

在线转换器无法处理此问题,因此您一定很沮丧。试试这个:

var query = from row in dt.AsEnumerable
            group row by new {Price = row.Field<double?>("price")}.Price, new {Cat = row.Field<int?>("category")}.Cat into g
            select new {G = g.Key, g};

【讨论】:

  • 我没有足够的 C# LINQ 知识来验证上述内容,但假设它是正确的,它应该是一个公认的答案,因为另一个甚至不是 C#。
  • 如上所述,我不相信 SO 是一个代码转换器。该链接甚至指出“LINQ 支持尚不完全可靠。请将不起作用的案例发布到我们的反馈论坛。”他的问题是错误地使用了转换器。如果转换器给出了不正确的输出,那么最好的讨论地点是在论坛中,在那里他们可以做一些事情来纠正它(当问题得到纠正时,可能会帮助更多的人解决更多的情况)
  • 并为转换 +1。尽管我认为匿名类型更容易理解为new { Price = row.Field&lt;double?&gt;("price), Cat = row.Field&lt;int?&gt;("category") },但您的类型是对已有内容的转换。
【解决方案2】:

为了回答您的问题,而不是为您转换它。确保在转换器中使用正确的语法。

这是您要转换的内容:

Dim query = _
From row In dt.AsEnumerable _
Group row By G = New With {.Price = row.Field(Of Double?)("price")}.Price, _
              New With {.Cat = row.Field(Of Integer?)("category")}.Cat _
             Into ProductGroups = Group

即使在 VB2012 中不需要它,但在转换器中似乎仍然使用_ 字符来指定该行上的语句不完整。

您现在可以使用link listed in the comments to the question 进行转换。

【讨论】:

  • 我不认为 Double?在 VB.Net 中也是允许的,不是 System.Nullable(of Decimal) 或类似的吗?
  • 我所知道的是问题中的代码在 vb.net 中应该可以正常工作!它没有显示任何错误
  • @user1590636 ,那怎么了?这个答案应该可以解决你的问题,试试转换工具,比如developerfusion.com/tools/convert/vb-to-csharp
  • @NickFreeman _ 在 VB2012 中不需要。似乎尚未更新转换器以考虑到这一点。
  • @AndrewMorton 谢谢你。就像我说的我不是 VB 开发人员,我只是注意到它们不见了,所以我在转换器中尝试了它们。我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
相关资源
最近更新 更多