不能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 });
坦率地说,在嵌入式查询我更喜欢后者的语法。
谢谢你 - 我第一次尝试列出的代码部分解决错误(尽管没有能够全面测试它尚未)。我看不出你会在哪里创建GroupInfo(它在Select子句中)?我已经修改了原来的岗位包括我离开只是为了保持代码的短If语句,但在后面的代码中使用它 – Computer
@Computer'GroupInfo'在C#版本是一个匿名类型。在命名该类型时没有太多用处,因为它始终可以通过创建的组的“Key”属性进行恢复。我甚至不确定c#语法是否允许命名您正在分组的匿名类型(我不记得曾经这么做过),现在我无法测试它。 – InBetween
是不是选择'.Select(group => new {group.Key,group});'冗余? – Magnus