3

LINQ を初めて使用するので、LINQ クエリを DataTable に変換したい

    DataClassesDataContext db = new DataClassesDataContext(MyConncectionString);
    IEnumerable<DataRow> qry = (IEnumerable<DataRow>)(from tbl in db.Table1.AsEnumerable()
                                                     select tbl);
    DataTable dt=new DataTable();
    qry.CopyToDataTable(dt, LoadOption.OverwriteChanges);
    GridView1.DataSource = dt;

しかし、私はエラーが発生しました

タイプ 'WhereSelectEnumerableIterator' のオブジェクトをタイプ 'System.Collections.Generic.IEnumerable`1[System.Data.DataRow]' にキャストできません。

誰でも私を助けてくれますか

4

2 に答える 2

1

ここでlinqに変換する必要はないと思いますか?あなたはすでにデータテーブルを取得しており、linq を実行し、再び linq に変換しています。したがって、ここで linq を実行する正当な理由がない限り、データ テーブルに固執する必要があります。

     DataClassesDataContext db = new DataClassesDataContext(MyConncectionString);
     IEnumerable<DataRow> qry = (IEnumerable<DataRow>)(from tbl in db.Table1.AsEnumerable()
                                                 select tbl);
    DataTable dt=new DataTable();
    qry.CopyToDataTable(dt, LoadOption.OverwriteChanges);
    GridView1.DataSource = dt;

あるべき、

    GridView1.DataSource = db.Table1
于 2012-07-15T12:08:57.680 に答える
1

これらは基本的な概念です:

.Net フレームワークに同梱されている LINQ プロバイダーがいくつかあります。

  • オブジェクトへのLINQ。System.Linq. これは LINQ コアであり、インメモリ コレクションで動作するように設計されています。

  • LINQ から XML へ。System.Xml.Linq XML ドキュメントを操作するには

  • LINQ to DataSet。DataTable および DataSet オブジェクトを操作するには

  • LINQ to SQL。System.Data.Linq SQL Server データベースを操作するために使用されます

  • エンティティへの LINQ。(Entity Framework) 複数のデータベースを操作するために使用されます。より豊富な API を提供します

あなたがやろうとしていることは次のとおりです。

LINQ to SQL コンテキストから返されたクエリから、オブジェクトのコレクションを返したいとしDataRowます。

LINQ to SQL オブジェクトと DataRow の間に単純な変換はないため、リフレクションを使用して目的の出力を取得する必要があると主張する場合は、DataContext を使用して LINQ クエリから DataTable を埋める最速の方法

本当に DataTable オブジェクトを操作したい場合は、厳密に型指定された DataSet を使用することをお勧めします。作成するには、新しい DataSet オブジェクトをプロジェクトに追加し、LINQ to SQL オブジェクトの場合と同様にサーバー エクスプローラーからテーブルをドラッグします。

可能であれば、使用する決定を評価し、DataRow代わりに LINQ To SQL によって生成されたオブジェクトを返すか、カスタム DTO オブジェクトを作成することをお勧めします。

あなたのコードについては、オブジェクトを使用しようとする理由がわかりませんDatatable(この決定を正当化するために余分なコードを投稿しない限り)。DataSourceコントロールのプロパティを設定するだけの場合は、次のようにします。

var q = from tbl in db.Table1
        select tbl;

this.myControl.DataSource = q;
this.myControl.DataBind();

必要に応じて、結果を匿名オブジェクトに変換し、次のように使用できますDataSource

var q = from tbl in db.Table1
        select new
        {
           MyNewProperty = tbl.ExistingProperty,
           AnotherProperty = tbl.MyCoolerProperty
        };

this.myControl.DataSource = q;
this.myControl.DataBind();
于 2012-07-15T12:14:21.603 に答える