不能lambda表达式VB .NET转换为C#

问题描述:

我试图将一些VB代码到C#。下面的VB.Net代码正在工作。不能lambda表达式VB .NET转换为C#

GroupCategories是分组类别,这简直是得到一些数据,并将其存储在一个列表的列表。

For Each Groups In From g In GroupCategories Group By GroupInfo = New With {g.Id, g.Name} Into SubCategories = Group Select GroupInfo, SubCategories 
     For Each sc In Groups.SubCategories 
      .... 
     Next 

     If Groups.GroupInfo.Id Is Nothing Then 
     .... 
     End If 
    End If 
Next 

我试图在C#转换:

foreach (var Groups in from g in GroupCategories group GroupInfo by new {g.Id, g.Name } into SubCategories select new { GroupInfo, SubCategories }) 
{ 
    .... 
} 

我已经尝试了几个在线coverters但不要成功转换。我已阅读MSDN的C#等效https://msdn.microsoft.com/en-us/library/bb545971.aspx,但我似乎仍然无法得到这个工作。

的当前错误是

无法转换lambda表达式键入“System.Collections.Generic.IEqualityComparer”,因为它不是一个委托类型

阅读上的错误给了我一些建议但我仍然收到错误转换。我不知道还有什么我可以尝试,因为我已经尝试了将每个组分割到它自己的部分的组合,但类似的错误弹出。任何人都可以看到我的错在哪里?

我认为你正在寻找以下LINQ查询:

from g in GroupCategories 
    group g by new { g.Id, g.Name } into SubCategories 
select new { SubCategories.Key, SubCategories } 

或等值:

GroupCategorias.GroupBy(g => new { g.Id, g.Name }) 
       .Select(group => new { group.Key, group }); 

坦率地说,在嵌入式查询我更喜欢后者的语法。

+0

谢谢你 - 我第一次尝试列出的代码部分解决错误(尽管没有能够全面测试它尚未)。我看不出你会在哪里创建GroupInfo(它在Select子句中)?我已经修改了原来的岗位包括我离开只是为了保持代码的短If语句,但在后面的代码中使用它 – Computer

+1

@Computer'GroupInfo'在C#版本是一个匿名类型。在命名该类型时没有太多用处,因为它始终可以通过创建的组的“Key”属性进行恢复。我甚至不确定c#语法是否允许命名您正在分组的匿名类型(我不记得曾经这么做过),现在我无法测试它。 – InBetween

+0

是不是选择'.Select(group => new {group.Key,group});'冗余? – Magnus