C# 获取Datatable列值时,指定的强制转换无效

C# 获取Datatable列值时,指定的强制转换无效,c#,.net,web-services,datatable,datarow,C#,.net,Web Services,Datatable,Datarow,当我试图从Datatable获取列值时,会出现上述错误消息 这是我在stacktrace中找到的: System.Linq.Enumerable.whereselectEnumerableInterator2.MoveNext() 位于System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable1 (来源) {booleanbuu0(System.Data.DataRow)} 这是我的密码: DataTable hr=新的DataTable

当我试图从Datatable获取列值时,会出现上述错误消息

这是我在stacktrace中找到的:

System.Linq.Enumerable.whereselectEnumerableInterator
2.MoveNext()
位于System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
1 (来源)

{booleanbuu0(System.Data.DataRow)}

这是我的密码: DataTable hr=新的DataTable()

hr.Columns.Add(“预订日期”);
人力资源栏。添加(“BookingId”);
人力资源栏。添加(“BookingSource”);
hr.列。添加(“检查日期”);
人力资源列。添加(“签出日期”);
for(int i=0;i

如果有人能告诉我,我哪里出错了。

使用
Add(string)
重载创建数据列时,列的类型是
string
(请参阅)。不能将字符串直接强制转换为
Int64
DateTime

使用重载或重载指定列数据的类型。

如果dr[“BookingId”]从不为null(否则添加null检查)

使用

而不是

                  Int64 BookingId = (from DataRow dr in hr.Rows
                      where (Int64)dr["BookingId"] == BookId
                      select (Int64)dr["BookingId"]).FirstOrDefault();

检查您的代码,前两行:

hr.Rows[i]["BookingDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingDate.ToString());
hr.Rows[i]["BookingId"] = Convert.ToInt64(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingId.ToString());
如果gmisc.GetModifiedBookings(gmoreq.Bookings[i].BookingDate为空,那么??? 您正在尝试将其转换为字符串,然后转换为日期时间

如果为空,则.ToString将给出错误“指定成本……”

在转换为datetime时也会发生同样的情况

                  Int64 BookingId = (from DataRow dr in hr.Rows
                        where Int64.Parse(dr["BookingId"].ToString()) ==BookId
                        select Int64.Parse(dr["BookingId"].ToString())).FirstOrDefault();
                  Int64 BookingId = (from DataRow dr in hr.Rows
                      where (Int64)dr["BookingId"] == BookId
                      select (Int64)dr["BookingId"]).FirstOrDefault();
hr.Rows[i]["BookingDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingDate.ToString());
hr.Rows[i]["BookingId"] = Convert.ToInt64(gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingId.ToString());