2016-11-09 15 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の例ではどのようなことがないことはグループがmultiCompGroupフィールド内のすべてのMultiCompDataにあり、foreachのとExpCompanyIdが空/ nullの場合CompanyDataの別のリストに追加します。まず、私は、クラスを紹介します。コード: - IEnumerableをしている(C#で、私は複製できない部分である)ExpCompanyId、VendorNumber、VendorNameおよびグループグループのforeachで

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) 

は、GRPには、次のプロパティがあります。 C#でIEnumerableをmultiCompGroupsに追加することはできませんか?私が試してみました:私は、foreachのを取得するとき

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

multiGroupsが私のGRP値にIEnumerableをとして表示されません、私はまた、このようにそれを試してみた:

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をするときに私は3つのプロパティを表示しています。しかし、 "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); 
    } 
} 
関連する問題