【问题标题】:Specified cast is not valid in lambda expression of DataRow List while fetching a column value获取列值时,指定的强制转换在 DataRow List 的 lambda 表达式中无效
【发布时间】:2016-04-18 17:45:04
【问题描述】:

我有一个 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 的值是 4IsDefault 的数据类型是 bitOrderID 在数据库中是 int。两者都不为空

【问题讨论】:

  • 数据库表中IsDefault和OrderId的字段类型是什么?
  • 问题中更新的详细信息

标签: c# lambda casting datatable


【解决方案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();

【讨论】:

    【解决方案2】:

    如果OrderIDint 的类型

    替换

    p.Field<long>("OrderID")
    

     p.Field<int>("OrderID")
    

    【讨论】:

      猜你喜欢
      • 2013-08-23
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2018-05-27
      相关资源
      最近更新 更多