【问题标题】:Datatable LINQ query throws exception for datetime column数据表 LINQ 查询引发日期时间列异常
【发布时间】:2015-03-21 10:54:42
【问题描述】:
for (DateTime date = fromDate; date <= toDate; date = date.AddDays(1))
{
   var bwSalesValue = (from r in dtSalesData.AsEnumerable()
                       where r.Field<int>("PositionId") == pdPositionId 
                       && r.Field<DateTime>("SaleDate") == date
                       select r.Field<int>("SaleValue")).FirstOrDefault();


}

从上面的 sn -p r.Field&lt;DateTime&gt;("SaleDate") == date 部分抛出异常Specified cast is not valid

日期变量和 dtSalesData 行具有相同的值3/1/2015 12:00:00 AM

有什么线索吗?

更新===================================

对不起朋友,我在这里犯了一个愚蠢的错误。问题在下一行-

select r.Field<int>("SaleValue")).FirstOrDefault(); //Would be <decimal>

请接受我的道歉。谢谢大家。

【问题讨论】:

  • 看看this。可能是类似的问题。

标签: c# linq datatable


【解决方案1】:

你试过这样做吗?

var bwSalesValue = (from r in dtSalesData.AsEnumerable()
                   where r.Field<int>("PositionId") == pdPositionId 
                   && Convert.ToDateTime(r.SaleDate) == date
                   select r.Field<int>("SaleValue")).FirstOrDefault();

【讨论】:

    【解决方案2】:
    for (DateTime date = fromDate; date <= toDate; date = date.AddDays(1))
    {
       var bwSalesValue = (from r in dtSalesData.AsEnumerable()
                           where r.Field<int>("PositionId") == pdPositionId 
                           && r.Field<DateTime>("SaleDate") == DBNull.Value ? DateTime.MinValue : date);
                           select r.Field<int>("SaleValue")).FirstOrDefault();
    
    
    }
    

    也许你不应该在 SaleDate 返回 DBNull.Value 时使用 where 子句,因为它不能将 DateTime 转换为 null。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2016-06-04
      • 2011-01-25
      相关资源
      最近更新 更多