0

このクエリを使用して、groupby「クライアント」+合計金額でデータをフィルタリングし、データグリッドを埋めています。selectキーワードに誤りがありました。これを修正する方法はありますか?

これは私が使用しているコードです:

IEnumerable<DataRow> query = from p in data.AsEnumerable()           
         where (p.Field<string>("BS") == txtFilterbyBC.Text 
                && p.Field<string>("YEAR") == txtYear.Text
                && p.Field<string>("RM") == txtRM.Text)
                group p by p.Field<string>("Client") into g
                select new
                {
                   Name = g.Key,
                   Total = g.Sum(x => Convert.ToDouble(x.Field<double>("AMOUNT")))
                };

System.Data.DataTable boundTable = query.CopyToDataTable<DataRow>();
dataGridView1.DataSource = boundTable;

エラーは次のとおりです。

タイプ 'System.Collections.Generic.IEnumerable' を 'System.Collections.Generic.IEnumerable' に暗黙的に変換することはできません。明示的な変換が存在します (キャストがありませんか?

4

1 に答える 1

0

使用CopyToDataTableしている方法は、一連のデータ行を取得してデータ テーブルに変換するように設計されています。シーケンス内の項目がまだタイプDataRow(またはより派生したタイプ) でない場合、それは機能しません。ここではそうです。

そのデータをデータ テーブルに変換する方法はありますが、その必要もありません。DataGridViewクエリに直接バインドするだけです。すべてを DataTable にまとめる必要はありません。そうすることは、必要のない努力に過ぎません。

実際に が必要だった場合DataTable(ただし、必要なようには見えません)、[この他の方法](型 'System.Collections.Generic.IEnumerable' を 'System.Collections.Generic に暗黙的に変換できません) を使用できます。非データ行ソースから .IEnumerable にデータをコピーするための明示的な変換が存在します (キャストがありませんか?) DataTable

于 2013-09-06T16:39:24.817 に答える