webentwicklung-frage-antwort-db.com.de

Die Quelle enthält keine DataRows

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

ds.Tables[4] hat Zeilen, löst aber die Ausnahme aus

"Die Quelle enthält keine DataRows."

Irgendeine Idee, wie man mit dieser Ausnahme umgeht oder sie beseitigt?

24
Mike

ds.Tables[4] Könnte, aber das Ergebnis Ihrer Linq-Abfrage könnte es nicht sein, was wahrscheinlich ist, wo die Ausnahme ausgelöst wird. Teilen Sie Ihre Methodenverkettung auf, um vorläufige Parameter zu verwenden, damit Sie genau wissen, wo der Fehler auftritt. Sie können auch nach vorhandenen Zeilen suchen, bevor Sie CopyToDataTable() aufrufen und diese Ausnahme vermeiden .

Etwas wie

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

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

Eine andere Möglichkeit besteht darin, die Funktion ImportRow für ein DataTable zu verwenden.

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

Einfach in zwei Zeilen teilen

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 ?
}

Auf diese Weise können Sie überprüfen, ob das Ergebnis eine DataRow enthält. Wenn ja, können Sie die CopyToDataTable-Methode aufrufen.

7
Steve