2017-02-09 29 views
0

我試圖將一些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」,因爲它不是一個委託類型

閱讀上的錯誤給了我一些建議但我仍然收到錯誤轉換。我不知道還有什麼我可以嘗試,因爲我已經嘗試了將每個組分割到它自己的部分的組合,但類似的錯誤彈出。任何人都可以看到我的錯在哪裏?

回答

1

我認爲你正在尋找以下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