2017-09-06 8 views
0

私は個別のユーザーIDで をグループ化して、各行を個別に処理する必要がある100以上の列と280以上の行を持つDataTableを持っています。 UserIDは一意ですが、各UserIDに複数の行があります(それぞれ UserIDには1〜20行が関連付けられます)。 UserIDを含むすべての列は、文字列値です。LINQ DataTables

私はこのようなコードを使用しています(のDataRowの)EnumerableRowCollectionを返すために

Dim src = From row In sampleTable.AsEnumerable() 

を、私は、私はエラーを取得したDataTableの ユーザーID列によってグループにしようとします。

私は、DataTable内の行をグループ化してUserIDで区別し、各行を処理する必要があります。また、サブプロセスの要件を満たすために処理する別々のユーザーIDをごとに追跡する必要があります。

DataTableを個別のUserIDでグループ化し、重複したUserIDを持つすべての行にアクセスする方法を教えてください。 )

Dim src = loanTable.AsEnumerable().ToLookup(x >= x.bSSN, x >= x) 

とToLookup(上のエラーを得た:私はこれまで受け取ったリプライした後

は、私はこれを試してみました。 "ToLookup"が呼び出されないため、オーバーロードの解決に失敗しました。(Typeパラメータ 'TKey'を推論できません) さらに、ToLookup(x => x.UserID、x => x)の 'x' 「X」が宣言されていないというエラーを返します

+0

最新のエラーメッセージを追加してください。 –

答えて

2

私はGroupByであなたの問題を知らないが、これは動作します。

Dim userIdGroups = sampleTable.AsEnumerable().GroupBy(Function(row) row.Field(Of Int32)("UserId")) 

は今、すべてのグループは、そのユーザーIDを持つすべての行が含まれてい

。もう1つのオプションは、検索を使用することです(辞書に似ていますが、利用できないキーにアクセスすることができます。 )の代わりに、例外に対するACK:

Dim userIdLookup = sampleTable.AsEnumerable().ToLookup(Function(row) row.Field(Of Int32)("UserId")) 

Dim userid1Rows As IEnumerable(Of DataRow) = userIdLookup(1) 

またGroupByまたはLookupのすべてのグループを列挙するFor eachを使用することができます。

For Each rg In userIdLookup 
    Dim userid = rg.Key 
    Dim count = rg.Count() 
    ' if you want to enumerate the rows: 
    For Each row In rg 
     ' process 
    Next 
Next 
+0

それぞれを参照している場合は、次のようになります。 userIdGroupsの各行について 次 - ? –

+0

@RandyJohnson:あなたのコードの 'row'変数は、' UserId'にアクセスできる 'Key'プロパティを持っています。 –

+0

私は各グループのキーとカウントをどこで得ることができるかを見ていますが、各グループの各行を処理するために入れ子のFor Eachを使用しますか?各行の各列から情報を取り出し、IBM Mainframe Reflectionsセッションに入力する必要があります。 –