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“问题,出现错误消息“指定的转换无效”
答案 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位。