如何将参数传递给DataRow

时间:2018-02-01 15:47:58

标签: c# linq

我有一个非常特殊的问题,我正在根据一系列日期过滤表格,当直接指定列号时,一切正常,但是没有这种方法。 ,因为,我得到“指定的转换无效”。我不知道大海是代码问题还是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;
    }

error capture

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();

1 个答案:

答案 0 :(得分:1)

这有效:

DataTable filteredTable = table.AsEnumerable().Where(row =>
                           (row.Field<DateTime>(1) > startDate) && 
                           (row.Field<DateTime>(1) <= endDate)).CopyToDataTable();