2010-12-29 14 views
0

私は正常にOLEDBを使用してExcelファイルをデータテーブルにインポートし、データグリッドビューに表示しました。今私はLINQを使用し、グリッドのデータソースをLINQクエリとして設定したいが、動作していない。LINQ to DataTableクエリのヘルプ

OleDbConnection conn = new OleDbConnection(); 
conn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Nick\Desktop\Pricing2.xlsx" + @";Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1;ImportMixedTypes=Text;TypeGuessRows=0"""; 

OleDbCommand command = new OleDbCommand 
(
    "SELECT * FROM [Pricing$]",conn 
); 
DataTable dt = new DataTable(); 
OleDbDataAdapter adapter = new OleDbDataAdapter(command); 
adapter.Fill(dt); 
var query = from a in dt.AsEnumerable() 
      select a; 
dataGridView1.DataSource = query; 
+0

どうして 'dataGridview1.DataSource = dt;'? LINQはこれには使用されません。 –

+0

@Danny:彼はもっと複雑なクエリをテストしていると思います。 – SLaks

+0

データテーブルの結果をデータベースに挿入します。私はLINQをADO.NETとしてSQLに使用し、ストアドプロシージャを手動で作成/アクセスするのは時間の無駄です。 –

答えて

1

データバインディングIList秒、ないIEnumerable秒で動作します。ここでは完全なコードです。

LINQクエリにバインドするには、ToList()を呼び出す必要があります。
LINQ-to-DataTableクエリ(DataRowを返すLINQクエリ)にバインドするには、you need to call AsDataView() instead
テーブル内の列のプロパティを表示するITypedList実装を返します。

匿名タイプ(DataRowではなく)を選択した場合は、ToList()が必要です。

+0

.Tolist()は非常に奇妙な結果を出しました.CopyToDataTable()を忘れました。 –

0

.ToList().CopyToDataTable()は正しい呼び出しです。

+0

実際には、 '.AsDataView()'は正しい呼び出しです。 – SLaks

+0

これは、あなたがそれを含むようにあなたの投稿を編集したかどうかわかりませんが、後者の場合は、すぐにToList()を見て、残りの部分を読みませんでした:( –

+0

私は – SLaks