【问题标题】:converting c# lambda expression LINQ to vb.net将 c# lambda 表达式 LINQ 转换为 vb.net
【发布时间】:2014-04-14 09:16:20
【问题描述】:

我在将以下查询从 c# 转换为 vb 时遇到问题。我无法正确使用语法 还可以,但对 LINQ 不太好。任何帮助表示赞赏。

var result = (From d In projectionEntities.projections
             Where d.SymbolId <= 42
             Join t In projectionEntities.symbols On d.SymbolId Equals t.Id                
             Group d by d.SymbolId into g
             select new {
                     SymbolId = g.Key,
                       ProjectionPerformances = 
                                   g.Select(gg=>new ProjectionPerformance{
                                               SymbolId = gg.SymbolId,
                                               Name = gg.Symbol.Name,
                                               rpDate = gg.Date.ToString(),
                                               ActualRange = gg.HighProjection - gg.LowProjection
                                              })
                  .ToDictionary(g=>g.SymbolId);

【问题讨论】:

  • 请同时发布您的 VB.Net Linq 代码。也许它只是一个小故障
  • 以后请不要在同一个代码 sn-p 中混合语言(你的代码是 C# 和 VB 的奇怪混合)——它只会增加更多的工作来解决问题。跨度>

标签: c# vb.net linq lambda


【解决方案1】:

我的方法是从有效的 C# 开始,使用工具进行翻译。然后根据生成的结果,我会根据需要进行一些调整。

这是一个与您的类似的有效 C# sn-p,只是稍作改动。

var projections = new[]
{
    new { SymbolId = 1, Name = "", Date = DateTime.Now }, 
    new { SymbolId = 2, Name = "", Date = DateTime.Now }
};
var symbols = new[] { new { Id = 1 }, new { Id = 2 } };

var result = 
(from p in projections
            where p.SymbolId <= 42
            join s in symbols on p.SymbolId equals s.Id
            group p by p.SymbolId into g
            select new
            {
                SymbolId = g.Key,
                ProjectionPerformances =
                            g.Select(gg => new
                            {
                                SymbolId = gg.SymbolId,
                                Name = gg.Name,
                                rpDate = gg.Date.ToString(),
                            }
                                        )
            }).ToDictionary(g => g.SymbolId);

将 C# 转换为 VB.net 的网站示例 - http://www.developerfusion.com/tools/convert/csharp-to-vb

这是生成的结果

Dim projections = New () {New With { _
    Key .SymbolId = 1, _
    Key .Name = "", _
    Key .[Date] = DateTime.Now _
}, New With { _
    Key .SymbolId = 2, _
    Key .Name = "", _
    Key .[Date] = DateTime.Now _
}}
Dim symbols = New () {New With { _
    Key .Id = 1 _
}, New With { _
    Key .Id = 2 _
}}

Dim result = (From g In From p In projections 
Where p.SymbolId <= 42Join s 
In symbols On p.SymbolId = s.IdGroup p By p.SymbolIdNew With { _
    Key .SymbolId = g.Key, _
    Key .ProjectionPerformances = g.[Select](Function(gg) New With { _
        Key .SymbolId = gg.SymbolId, _
        Key .Name = gg.Name, _
        Key .rpDate = gg.[Date].ToString() _
    }) _
}).ToDictionary(Function(g) g.SymbolId)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多