2017-11-28 14 views
0

にSystem.Data.EnumerableRowCollection を変換する:私はまた C#の私はLINQのを使用してfilterdたデータテーブル有するデータテーブル

result.CopyToDataTable() 
CopyToDataTable方法を用いて試みた

result = myDataTable.AsEnumerable().Where(row => row.Field<string>("id").Contains(values)); 

result.CopyToDataTable<DataRow>() 

が、彼らは動作しませんでした。 resultを新しいDataTableに変換するにはどうすればよいですか? Stack Overflowの質問や他の多くのチュートリアルを検索していますが、探したいものが見つかりません。私はカンマ区切りにHashSetの連結している

UPDATE

は、私は文字列またはHashSetのの配列を使うべきだと思いますか?

+1

なぜ新しいDataTableとして使用しますか?あなたはおそらく最善の方法を取っていないように思えます。そして、おそらく 'AsEnumerable()。Where'を呼び出すことは避けたいでしょう。これは、フィルタリングを行う前にテーブル全体をメモリにダウンロードするためです。 –

答えて

3

DataTableのオブジェクトを作成し、それに問題を解決するImportRow()関数を呼び出して行をインポートすることをお勧めします。

DataTable.ImportRow Method

例コード。あなたのための

DataTable tblClone = datTab.Clone(); 
foreach (DataRow datRow in datTab.Rows) 
{ 

     tblClone.ImportRow(datRow); 
} 

それはあなたがそれを再割り当てしない限り、それは変数を変更しませんのDataTableを返し.CopyToDataTable<DataRow>()

var result = myDataTable.AsEnumerable().Where(row => row.Field<string>("id").Contains(values)); 
DataTable tblClone = myDataTable.Clone(); 
foreach(DataRow dr in result) 
    tblClone.ImportRow(dr); 
+0

私はあなたの答えとその作業を試しました –

1

のようになります。

result = myDataTable.AsEnumerable().Where(row => row.Field<string>("id").Contains(values)); 

実際には、DataTableオブジェクトが必要です。

DataTable resultDT = result.CopyToDataTable<DataRow>();

編集:ティムが指摘したように何行があなたのクエリによって返されていない場合は、例外が"The source contains no DataRows"

をスローされますあなたはそうのような何かを行うことができます。

DataTable resultDT = result.Any() ? result.CopyToDataTable<DataRow>() : myDataTable.Clone();

しかし、それは二回のクエリを実行します(ティムが指摘としても)。

したがって、それを(.ToList())を使用してリストオブジェクトに変換し、カウントをチェックして処理してください。これは、オブジェクト(Listオブジェクト)の新しいインスタンスを作成するようなパフォーマンスの影響をもたらします。

try/catchDataTableに変換しようとすると、それも良い考えではありません。最終結果を達成するもう一つの素晴らしい方法については、Pranaysの答えを参照してください。

+0

'CopyToDataTable'は、述語に一致する行がなければ例外をスローすることに注意しなければなりません。 、奇妙なクエリ)。 'if(result.Any())... 'を使うことができます。しかし、これはクエリを2回実行します。私は 'DataTable resultDT = myDataTable.Clone();が好きです。foreach(var r in result)resultDT.ImportRow(r);' –

+0

@TimSchmelterそれを指摘してくれてありがとう。それを追加します、歓声。 – Adriani6

+0

@ Adriani6私はそれを試みたが、それはエラーを与える。 –

関連する問題