使用LINQ搜索数据表

时间:2018-08-13 07:40:54

标签: c# linq

           table
Sr. No. | Arrival    | Departure  | 
-----------------------------------
1       | 10/08/2018 | 11/08/2018 |
-----------------------------------
2       | 11/08/2018 | 12/08/2018 |
-----------------------------------
3       | 12/08/2018 | 13/08/2018 |
-----------------------------------
4       | 13/08/2018 | 14/08/2018 |

我有dataTable名称表。我想搜索大于11/08/2018的数据并在dataGridView1中显示结果。我正在使用以下代码,但无法正常工作。

  var dtCurrnet = DateTime.Now.Date;

        EnumerableRowCollection<DataRow> query = from arrvDate in dtReservation.AsEnumerable()
                                     where arrvDate.Field<DateTime>("ArrvDate") > dtCurrnet
                                     select arrvDate;


        DataView view = query.AsDataView();
        DataTable dtTest = view.ToTable(); 

        dataGridView1.DataSource = dtTest;

我遇到“ where arrvDate.Field(“ ArrvDate”)> dtCurrnet“问题,出现错误消息“指定的转换无效”

1 个答案:

答案 0 :(得分:1)

请确保您表中的列类型确实是DateTime类型。我已经尝试使用以下测试代码查询您的查询,并且效果很好。我怀疑您的ArrvDate的列类型不是DateTime,可能是'String'类型。

一种检查数据类型的方法是使用以下代码,尽管设置断点,调试然后检查数据表会容易得多

Console.WriteLine(dtReservation.Columns["ArrvDate"].DataType.FullName);

无论如何,以下是我用来验证Linq查询的代码示例;似乎工作正常。

var dtReservation = new DataTable();

dtReservation.Columns.Add("Sr. No.", typeof(Int32));
dtReservation.Columns.Add("ArrvDate", typeof(DateTime));
dtReservation.Columns.Add("Departure", typeof(DateTime));

dtReservation.Rows.Add(new Object[] { 1, new DateTime(2018, 8, 10), new DateTime(2018, 8, 11) });
dtReservation.Rows.Add(new Object[] { 2, new DateTime(2018, 8, 11), new DateTime(2018, 8, 12) });
dtReservation.Rows.Add(new Object[] { 3, new DateTime(2018, 8, 12), new DateTime(2018, 8, 13) });
dtReservation.Rows.Add(new Object[] { 4, new DateTime(2018, 8, 13), new DateTime(2018, 8, 14) });

var dtCurrnet = DateTime.Now.Date.AddDays(-11);

EnumerableRowCollection<DataRow> query =
    from arrvDate in dtReservation.AsEnumerable()
    where arrvDate.Field<DateTime>("ArrvDate") > dtCurrnet
    select arrvDate;
  

PS:我必须稍微减去11天才能更改代码   它实际上从查询返回一行;因为现在是23号   和您给出的示例值一直排到第13位。