2016-11-09 62 views
1

我想將VB中的一些代碼轉換爲C#,並且在使用此特定的LINQ查詢時遇到了極其困難的時間。通過它在LINQ查詢中無法獲得繼承類的IEnumerable

Public Class CompanyData 
     Property CompanyID As String = "" 
     Property VendorNumber As String = "" 
     Property VendorName As String = "" 

End Class 

Public Class MultiCompData 
     Inherits CompanyData 

     Property ExpCompanyId As String = "" 
End Class 

然後在VB例如它做什麼是組中的所有成MultiCompData在multiCompGroup領域的foreach並添加CompanyData的不同列表,如果ExpCompanyId爲空/空:首先,我會告訴類。代碼:

Sub ProcessMultiCompData(multiCompDataJEs As IEnumerable(Of MultiCompData), ByRef multiCompData As List(Of CompanyData), ByRef undeterminedDists As List(Of CompanyData)) 

    Dim multiCompGroups = 
     From m In multiCompDataJEs 
     Group m By m.ExpCompanyId, 
        m.VendorNumber, 
        m.VendorName 
     Into Group 

    For Each grp In multiCompGroups 
     If grp.ExpCompanyId = "" Then 

      undeterminedDists.AddRange(grp.Group) 

在foreach,GRP具有以下屬性 - ExpCompanyId,VendorNumber,VENDORNAME和組(這是在C#我不能複製的部分)基團是一個IEnumerable。是不是可以將C#中的IEnumerable添加到multiCompGroups?我曾嘗試:

var multiCompGroups = from m in multiCompDataJEs group by new {m.ExpCompanyiD, m.VendorNumber, m.VendorName} into multiGroups 

multiGroups在我的GRP值不顯示爲一個IEnumerable當我到了的foreach,我也試着這樣說:

var multiCompGroups = multiCompDataJEs.GroupBy(x => new {m.ExpCompanyId, m.VendorNumber, m.VendorName}).Select(y => new {y.Key.ExpCompanyId, y.Key.VendorNumber, y.Key.VendorName}).ToList(); 

兩者都產生一樣的東西。我有三個屬性出現在我做grp時。但「Into Group」(上面VB代碼中的grp.Group)不會在C#中顯示。它甚至有可能做到嗎?

回答

2

你要找的C#是:

var multiCompGroups = 
    from m in multiCompDataJEs 
    group m by new {m.ExpCompanyiD, m.VendorNumber, m.VendorName} into multiGroups 
    select multiGroups; 

foreach(var grp in multiCompGroups) 
{ 
    if(grp.Key.ExpCompanyId == "") 
    { 
     undeterminedDists.AddRange(grp); 
    } 
}