3

データテーブルに多数の行が含まれるシナリオがあります。その結果、ループを使用してデータテーブルを反復および更新できません。

行コレクションを取得するために次のコードを使用しています。

         from row in CSVDataTable.AsEnumerable()
         where CSVDataTable.Columns.Cast<DataColumn>().Any(col => !row.IsNull(col))
         select row;

ループを使用せずに上記のコードの結果をデータテーブルに割り当てる方法を教えてください。

4

2 に答える 2

4

次のコードで、Linq クエリの結果をデータ テーブルに割り当てることができます。

           // Create a DataTable from Linq query.       

             IEnumerable<DataRow> query = from row in CSVDataTable.AsEnumerable()
                                            where CSVDataTable.Columns.Cast<DataColumn>().Any(col => !row.IsNull(col))
                                            select row; //returns IEnumerable<DataRow>

             DataTable CSVDataTableWithoutEmptyRow = query.CopyToDataTable<DataRow>();

詳しくはリンク先をご覧ください、

http://msdn.microsoft.com/en-us/library/bb386921.aspx

于 2011-06-14T12:26:09.933 に答える
1

あなたは私が思う避けられないことを避けようとしています。

を返す「怠惰な」クエリがありますIEnumerable<DataRow>DataRowこのクエリは、それが表すコレクションにアクセスしようとすると、列挙されます。

唯一の違いは、直接実行するか、DataTableその実装の詳細を非表示にする方法です。

私は次のことをします:

DataTable table;
table.BeginLoadData();
foreach (DataRow row in query)
{
     table.ImportRow(row);
}
table.EndLoadData();
于 2011-06-14T10:48:54.373 に答える