それぞれの ID フィールドが同じである DataSet に 2 つのテーブルがあります。2 つのテーブル間に関係があります。C# コードで、Table1 の情報に関連する Table2 から情報を取得するにはどうすればよいですか?
新しい DataRow を使用して GetChildRow を使用して割り当てようとしましたが、何らかの理由で機能しないようです。
また、この質問があまり参考にならないことも承知しておりますので、お知らせいただければ、より明確に説明できるよう努めます。
DataSet が厳密に型指定されている (つまり、.xsd ファイルから生成されている) 場合、答えは異なります (そして非常に簡単です)。以下ではそうではないと思いますが、そうである場合は声を上げてください。
一般的な DataSet オブジェクトの場合、その答えは、何を持っているかによって大きく異なります。単純な ID がある場合は、関連する DataTable の選択で ID を使用するのがおそらく最も簡単です。これは、探している情報を含む DataRows の配列を返すため、どちらか (または両方) のテーブルで機能します。
親 DataRow がある場合 (実際にそうである可能性が高いと思われます)、使用する最適な方法は関係 (つまり、どちらが親であるか) によって異なります。Table1 が親で、関連する Table2 の子行に移動したい場合は、GetChildRow を探しています (従うべき関係をできるだけ具体的に指定するのが最善です)。Table2 が親で、Table1 の DataRow から Table2 の親に移動する場合は、GetParentRow を使用する必要があります (ここでも、リレーションをできるだけ具体的に識別します。手元にある場合はリレーション オブジェクトを使用します)。 )。
厳密に型指定された DataSet では、各 DataRow オブジェクトは、関係ごとに特定のメソッドまたはプロパティを持ちます。親の DataRow があり、Table2 の子に移動する場合は、複数形のメソッドになります (つまり、「row.GetTable2Rows()」)。子があり、親に移動したい場合は、単一のプロパティ ("row.Table2Row") になります。
コメントはこの応答には十分な長さではなかったので、別の答えにします。
新しいテーブルを使用する必要はありません。行オブジェクトの配列を使用して、そこから移動します。DataSet名前空間が「EventData」であるとしましょう。少し分解して、すべてが1行にならないようにします。
// The parent row
EventData.GroupAttendingEventRow groupAttendingEvent = currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter];
// an array of children rows
EventData.GroupTableRow[] eventGroup = groupAttendingEvent.GetGroupTableRows();
次に、eventGroup [0]を使用して最初の要素を取得するなど、必要に応じて「eventGroup」配列を操作できます。
だからここに私がしたことがあります。これが最善かどうか、またはもっと速いものがあれば教えてください。表 2 の正確なレプリカである新しいテーブルを作成し、次のコードを記述しました。
currentDataSet.GroupTableOneRow.Clear();
currentDataSet.GroupAttendingEventTable[groupAttendingEventCounter].GetGroupTableRows().CopyToDataTable(currentDataSet.GroupTableOneRow, LoadOption.OverwriteChanges);
次に、レコード 0 にある 1 つのテーブルを呼び出して、必要な名前を取得します。それは機能しますが、より効率的な方法はありますか?