在获取列值

时间:2016-04-18 09:11:53

标签: c# lambda casting datatable

我有一个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();
}

现在,我想从此记录中获取特定列的值,但我得到了以下异常

enter image description here

PS:我可以在DB和调试模式defaultOrder变量中看到OrderID的值 4 。 数据库中IsDefault的数据类型为OrderID int 。两者都 not null

2 个答案:

答案 0 :(得分:1)

如果OrderIDint的类型

替换

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();