当我尝试从Datatable获取Column Value时,会出现上述错误消息。
这是我在stacktrace中找到的:
System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext()
1 源)
at System.Linq.Enumerable.FirstOrDefault[TSource](IEnumerable
and this in the TargetSite when debugging:
{Boolean b__0(System.Data.DataRow)}
这是我的代码: DataTable hr = new DataTable();
hr.Columns.Add("BookingDate");
hr.Columns.Add("BookingId");
hr.Columns.Add("BookingSource");
hr.Columns.Add("CheckInDate");
hr.Columns.Add("CheckOutDate");
for (int i = 0; i < gmisc.GetModifiedBookings(gmoreq).Bookings.Length; i++)
{
hr.Rows.Add();
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());
hr.Rows[i]["BookingSource"] = gmisc.GetModifiedBookings(gmoreq).Bookings[i].BookingSource.ToString();
hr.Rows[i]["CheckInDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].CheckInDate.ToString());
hr.Rows[i]["CheckOutDate"] = Convert.ToDateTime(gmisc.GetModifiedBookings(gmoreq).Bookings[i].CheckOutDate.ToString());
}
Int64 BookingId = (from DataRow dr in hr.Rows
where (Int64)dr["BookingId"] == BookId
select (Int64)dr["BookingId"]).FirstOrDefault();
TextBox1.Text = Convert.ToString(BookingId);
如果有人可以告诉我,我哪里出错了。
答案 0 :(得分:1)
如果dr [“BookingId”]永远不为null(否则添加空检查)
使用
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();
答案 1 :(得分:1)
检查你的代码,前两行:
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为null则??? 你试图将它转换为字符串,然后转换为日期时间
如果为null则.ToString将给出错误“Specified cost .......”
同样会在转换为datetime时发生。
答案 2 :(得分:0)
使用Add(string)
重载创建数据列时,列的类型为string
(请参阅http://msdn.microsoft.com/en-us/library/52xzw8tf.aspx)。您无法将字符串直接转换为Int64
或DateTime
。
使用Add(string, Type)
重载或Add(string, Type, string)
重载来指定列数据的类型。