我有一个非常特殊的问题,我正在根据一系列日期过滤表格,当直接指定列号时,一切正常,但是没有这种方法。 ,因为,我得到“指定的转换无效”。我不知道大海是代码问题还是LINQ的错误。我留下了两个案例。
工作正常:
public DataTable GetTableByDate(DataTable table, DateTime startDate, DateTime endDate, int columnNumber)
{
var filteredRows = from row in table.Rows.OfType<DataRow>()
where (DateTime)row[1] > startDate
where (DateTime)row[1] <= endDate select row;
var filteredTable = table.Clone();
filteredRows.ToList().ForEach(r => filteredTable.ImportRow(r));
return filteredTable;
}
不起作用:
public DataTable GetTableByDate(DataTable table, DateTime startDate, DateTime endDate, int columnNumber)
{
var filteredRows = from row in table.Rows.OfType<DataRow>()
where (DateTime)row[columnNumber] > startDate // Error
where (DateTime)row[columnNumber] <= endDate select row; // Error
var filteredTable = table.Clone();
filteredRows.ToList().ForEach(r => filteredTable.ImportRow(r));
return filteredTable;
}
System.InvalidCastException
HResult=0x80004002
Message=La conversión especificada no es válida.
Source=<Cannot evaluate the exception source>
StackTrace:
<Cannot evaluate the exception stack trace>
invoke(columnNumber为静态“1”):
try
{
startDate = DateTime.Parse(Session["FCDstartDate"].ToString());
}
catch (Exception)
{
startDate = DateTime.Now;
}
grdTest.DataSource = mergeTables.GetTableByDate(dataTable, startDate,
startDate.AddDays(14), 1);
grdTest.DataBind();
答案 0 :(得分:1)
这有效:
DataTable filteredTable = table.AsEnumerable().Where(row =>
(row.Field<DateTime>(1) > startDate) &&
(row.Field<DateTime>(1) <= endDate)).CopyToDataTable();