2015-02-04 11 views
13
DataTable dt = ds.Tables[4].AsEnumerable() 
    .Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date) 
    .CopyToDataTable(); 

ds.Tables[4] Reihen hat, aber es wirft die AusnahmeDie Quelle enthält keine DataRows

"Die Quelle keine DataRows enthält."

Irgendeine Idee, wie man diese Ausnahme behandelt oder loswird?

+0

Nur um sicher zu gehen, wollen Sie nur Einträge, die für heute oder einen Tag in der Zukunft sind? – ryanyuyu

+0

Es tritt auf, weil keine Datensätze übereinstimmen oder die Abfragebedingung vollständig ausfüllen, und das Ergebnis ist null, also versuche ich hier, null in Datentabelle zu kopieren ... – Mike

+0

Wenn Sie die DataTable füllen, können Sie die Abfrage in Bezug auf die SQL nicht ändern Füllen Sie die ursprüngliche DataTable ..? Was wäre, wenn Sie den labda-Ausdruck in eine Linq-Abfrage ändern würden? Haben Sie darüber auch schon nachgedacht https://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable%28v=vs .110% 29.aspx || https://msdn.microsoft.com/en-us/library/bb386921%28v=vs.110%29.aspx || http://forums.asp.net/t/1557426.aspx?Query+CopyToDataTable+does+not+work+when+selected+new+ist+used – MethodMan

Antwort

21

ds.Tables[4] könnte, aber das Ergebnis Ihrer linq-Abfrage möglicherweise nicht, was wahrscheinlich ist, wo die Ausnahme ausgelöst wird. Teilen Sie Ihre Methodenverkettung auf, um Zwischenparameter zu verwenden, damit Sie sicher sein können, wo der Fehler auftritt. Es wird Ihnen auch helfen, nach vorhandenen Zeilen zu suchen, bevor Sie CopyToDataTable() anrufen und vermeiden die genannte Ausnahme.

So 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 weitere Option ist die ImportRow Funktion auf einer DataTable

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); 
+0

Es tritt auf, weil keine Datensätze übereinstimmen oder die Abfragebedingung vollständig erfüllt result ist null, also versuche ich hier, null in datatable zu kopieren. – Mike

+0

@Mike Wie ich bereits sagte - das Teilen Ihrer Methodenkette und das Überprüfen Ihrer Zwischenergebnisse ist eine Möglichkeit. Die Kommentare zu Ihrer Frage haben ein anderes vorgeschlagen. –

+0

bereits versucht, diesen gleichen Fehler – Mike

3

einfach Aufspaltung in zwei Zeilen, wenn das Ergebnis zu überprüfen

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

Dies ermöglicht die Verwendung Enthält eine beliebige DataRow, wenn ja, dann könnten Sie die Kopie aufrufen ToDataTable-Methode.

Verwandte Themen