web-dev-qa-db-ja.com

ソースにDataRowsが含まれていません

DataTable dt = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date)
    .CopyToDataTable();

ds.Tables[4]には行がありますが、例外がスローされます

「ソースにはDataRowsが含まれていません。」

この例外を処理または取り除く方法はありますか?

24
Mike

_ds.Tables[4]_はそうかもしれませんが、linq-queryの結果はそうではないかもしれません。これは例外がスローされている場所である可能性が高いです。エラーが発生している場所を確実に特定できるように、メソッドチェーンを分割して暫定パラメーターを使用します。また、CopyToDataTable()avoid例外を呼び出す前に、既存の行を確認するのに役立ちます。

何かのようなもの

_DataTable dt = null;
var rows = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);

if (rows.Any())
    dt = rows.CopyToDataTable();
_

別のオプションは、ImportRowDataTable 関数を使用することです

_DataTable dt = ds.Tables[4].Clone();
var rows = ds.Tables[4].AsEnumerable()
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);

foreach (var row in rows)
    dt.ImportRow(row);
_
35
J. Steen

単純に2行に分割する

var rowSources = ds.Tables[4].AsEnumerable()
           .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);
if(rowSources.Any())
{
   DataTable dt = rowSources.CopyToDataTable();
   ... code that deals with the datatable object
}
else
{
   ... error message ?
}

これにより、結果にDataRowが含まれているかどうかを確認できます。DataRowが含まれている場合は、CopyToDataTableメソッドを呼び出すことができます。

7
Steve