dinotom
dinotom

Reputation: 5162

converting c# lambda expression LINQ to vb.net

I am having trouble converting the following query to vb from c#. I cant get the syntax right and am ok but not great with LINQ. Any help appreciated.

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);

Upvotes: 0

Views: 237

Answers (1)

Kunukn
Kunukn

Reputation: 2236

My approach is to start from valid C# and use a tool to do the translation. Then from the generated result I make few adjustments if needed.

This is a valid C# snippet similar to yours, with minor alterations.

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);

Example of a website which translates C# to VB.net - http://www.developerfusion.com/tools/convert/csharp-to-vb

This is the generated result

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)

Upvotes: 2

Related Questions