2 つのテーブルを結合し、それぞれから目的のパラメーターを抽出する Linq to dataset クエリがあります。DataTable
にバインドするには、それらを に取得する必要がありDataGridView
ます。MSDNでこれを実行するために見つけた例は、1 つのテーブルから 1 つの値を取得する簡単な例ですが、それに従うようにクエリを変更しようとすると、変更できませんでした。このCopyToDataTable()
メソッドでは、クエリを に割り当てる必要がありますが、IEnumerable<DataRow>
そうすると、明示的なキャストが必要であると言われます。ただし、キャストは実行時に次の例外で失敗します。
タイプ 'd__61`4[System.Data.DataRow,System.Data.DataRow,System.Int32,<>f__AnonymousType0`1[System.Int32]]' のオブジェクトをタイプ 'System.Collections.Generic.IEnumerable` にキャストできません1[System.Data.DataRow]'.
元の作業クエリ:
var query = MyDataSet.Table1.AsEnumerable().Join(MyDataSet.Table2.AsEnumerable(),
table1 => table1.Field<Int32>("Table1_Id"),
table2 => table2.Field<Int32>("Table1_Id"),
(table1, table2) => new
{
Table1ID = table1.Field<Int32>("Table1_Id")
//Other parameters commented out to simplify the example
});
明示的なキャストを使用した非動作クエリ:
IEnumerable<DataRow> query = (IEnumerable<DataRow>)MyDataSet.Table1.AsEnumerable()
.Join(MyDataSet.Table2.AsEnumerable(),
table1 => table1.Field<Int32>("Table1_Id"),
table2 => table2.Field<Int32>("Table1_Id"),
(table1, table2) => new
{
Table1ID = table1.Field<Int32>("Table1_Id")
//Other parameters commented out to simplify the example
});