我有一个DataTable orders
,我使用lambda表达式过滤掉没有任何循环的记录。 if条件中的第一行正常工作并返回有效记录。
if (orders.Rows.Count > 0)
{
//This line returns a record
var defaultOrder = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).ToList();
//The line below gives me an exception Specified cast is not valid.
var defaultOrderID = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).Select(p => p.Field<long>("OrderID")).FirstOrDefault();
}
现在,我想从此记录中获取特定列的值,但我得到了以下异常
PS:我可以在DB和调试模式defaultOrder
变量中看到OrderID
的值 4 。
数据库中IsDefault
的数据类型为位,OrderID
为 int 。两者都 not null 。
答案 0 :(得分:1)
如果OrderID
是int
的类型
替换
p.Field<long>("OrderID")
带
p.Field<int>("OrderID")
答案 1 :(得分:1)
您可以在DataRow中检查字段“OrderID”的数据类型, 行没有。其下的记录,展开任何1条记录,列属性,选择字段“OrderID”并检查它的数据类型。
如果长时间给出错误并且它在DB中的值为4,那么它的数据类型应为Int32,请使用该值。
var defaultOrderID = orders.Rows.Cast<DataRow>().Where(p => p.Field<bool>("IsDefault")).Select(p => p.Field<Int32>("OrderID")).FirstOrDefault();