The CopyToDataTable() method copies structure and Data, if you have any data in first datatable. Error comes when Linq filtered table is empty, and CopyToDataTable() tries to copy it.
Related Articles
For that there 2 solution i can suggest.
1. First Approach : Check if Enumerable result contains any row using "rows.Any()".
var rows = ds.Tables[0].AsEnumerable()
.Where(x => ((DateTime)x["EndDate"]).Date >= DateTime.Now.Date);
if(rows.Any())
{
DataTable dt = rowSources.CopyToDataTable();
}
2. Second Approach : Use Clone() method to create an empty DataTable with the same schema as the source table and use a loop to fill it from the LINQ query.
DataTable merged = dt.Clone();
foreach (DataRow sourceRow in rows)
{
merged.ImportRow(sourceRow);
}
return merged;
CopyToDataTable() Returns a System.Data.DataTable that contains copies of the System.Data.DataRow objects, given an input System.Collections.Generic.IEnumerable object where the generic parameter T is System.Data.DataRow.