これらは基本的な概念です:
.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();