2

Excelスプレッドシートからデータを読み取るコードがあり、SOに関するいくつかの回答でここまで行きました

DataTable dt = ds.Tables[0];
dt = dt.AsEnumerable().Where((row, index) => index > 4).CopyToDataTable();
DataTable filteredRows = dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => !(field is System.DBNull))).CopyToDataTable();

これを持っている

dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.All(field => (field is System.DBNull)))

空のすべての行を返します。

私も試しAnyましたが、必要な出力が得られませんでした

上記のコードは、すべてのフィールドが NULL でない場合、つまりすべての列にフィールドがある場合に機能します。これにより、1列が欠落しているすべての行が除外されますが、それは私が望むものではありません。

すべての列が空であるすべての行を除外したい。

4

2 に答える 2

6

NOT ( !) を 1 レベル外に移動するだけです。「すべての行が null ではない」が真であるアイテムではなく、「すべての行が null ではない」が真ではないアイテムが必要です。

DataTable filteredRows = dt.Rows.Cast<DataRow>()
    .Where(row => !row.ItemArray.All(field => field is System.DBNull))
    .CopyToDataTable();
于 2012-09-13T17:02:10.310 に答える
0

すべてではなく任意のフィールドにフィルターをかけてみましたか?

DataTable filteredRows = dt.Rows.Cast<DataRow>().Where(row => row.ItemArray.Any(field => !(field is System.DBNull))).CopyToDataTable();
于 2012-09-13T16:49:12.153 に答える