峰峦@叠嶂 2025-01-07 11:31 采纳率: 98%
浏览 16
已结题

合并数据表时的,报错提示问题;

这段代码,是将第一个数据表的“产品名称、规格和目标值”,与第二个数据表的,各产品的出入库数量,合并起来,但在实际执行过程中,使用该方法时,报错提示无效的转换,请问是什么原因呢,在实际查询中,会有在第一个数据表内,有的产品名称、规格和目标值等信息,但在第二出入库的数据表内,因出入库数量是零,所以查询不显示的情况,请问是否与此有关呢,怎么解决这个无效转换的报错问题呢;


```c#
  private DataTable MergeTable(DataTable dt1, DataTable dt2)
  {
      DataTable mergedTable = new DataTable();
      mergedTable.Columns.Add("proName", typeof(string));
      mergedTable.Columns.Add("spec", typeof(string));
      mergedTable.Columns.Add("target", typeof(float));
      mergedTable.Columns.Add("DayInAmount", typeof(decimal));
      mergedTable.Columns.Add("MonthInAmount", typeof(decimal));
      mergedTable.Columns.Add("YearInAmount", typeof(decimal));
      mergedTable.Columns.Add("DayOutAmount", typeof(decimal));
      mergedTable.Columns.Add("MonthOutAmount", typeof(decimal));
      mergedTable.Columns.Add("YearOutAmount", typeof(decimal));

      var mergedRows = from row1 in dt1.AsEnumerable()
                       join row2 in dt2.AsEnumerable()
                       on new { proName = row1.Field<string>("proName").Trim(), spec = row1.Field<string>("spec").Trim() }
                       equals new { proName = row2.Field<string>("proName").Trim(), spec = row2.Field<string>("Fmodel").Trim() }
                       into gj
                       from subRow2 in gj.DefaultIfEmpty()
                       select new
                       {
                           proName = row1.Field<string>("proName").Trim(),
                           spec = row1.Field<string>("spec").Trim(),
                           target = row1.IsNull("target") ? 0f : row1.Field<float>("target"),
                           DayInAmount = subRow2 == null || subRow2.IsNull("DayInAmount") ? 0m : subRow2.Field<decimal>("DayInAmount"),
                           MonthInAmount = subRow2 == null || subRow2.IsNull("MonthInAmount") ? 0m : subRow2.Field<decimal>("MonthInAmount"),
                           YearInAmount = subRow2 == null || subRow2.IsNull("YearInAmount") ? 0m : subRow2.Field<decimal>("YearInAmount"),
                           DayOutAmount = subRow2 == null || subRow2.IsNull("DayOutAmount") ? 0m : subRow2.Field<decimal>("DayOutAmount"),
                           MonthOutAmount = subRow2 == null || subRow2.IsNull("MonthOutAmount") ? 0m : subRow2.Field<decimal>("MonthOutAmount"),
                           YearOutAmount = subRow2 == null || subRow2.IsNull("YearOutAmount") ? 0m : subRow2.Field<decimal>("YearOutAmount")
                       };


      // Add the merged rows to the new DataTable
      foreach (var row in mergedRows)
      {
          mergedTable.Rows.Add(row.proName, row.spec, row.target, row.DayInAmount, row.MonthInAmount, row.YearInAmount, row.DayOutAmount,
                               row.MonthOutAmount, row.YearOutAmount);
      }

      return mergedTable;
  }

```

  • 写回答

3条回答 默认 最新

  • 峰峦@叠嶂 2025-01-11 15:15
    关注

    找到原因了,将数据库对应的字段类型,由float改为real,就可以正常转换了;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 已采纳回答 1月11日
  • 修改了问题 1月7日
  • 创建了问题 1月7日