指定的强制转换在 linq 查询中无效

Any*_*are 4 c# linq asp.net datatable casting

有什么方法而不是尝试和错误来指定哪个字段会导致问题以及正确的字段类型是什么?

我收到以下异常:

指定的演员表无效。

 var vacStatiscs = from x in dtGivenBal.AsEnumerable()
                                  join y in dtTakenBal.AsEnumerable()
                                  on x["emp_num"].ToString() equals y["emp_num"].ToString()
                                  into joined
                                  from j in joined.DefaultIfEmpty()
                                  select new
                                  {
                                      emp_num = x.Field<int>("emp_num"),
                                      name = x.Field<string>("name"),
                                      startBal = x.Field<int>("startBal"),
                                      prevMon = x.Field<int>("PrevMon"),
                                      added = x.Field<int>("Added"),
                                      taken = (j == null) ? 0 : j.Field<Int32>("sum")

                                  };
Run Code Online (Sandbox Code Playgroud)

现在,如果我删除startBal ,prevMon ,added,则不会有任何例外。

注意:前面的字段是COUNTSUMSQL 查询的结果

Tim*_*ter 6

没有直接的方法来检测哪个字段产生了问题。

要回答您的第二个问题,如何找出正确的字段类型:

Type fieldType = dtGivenBal.Columns["startBal"].DataType;
Run Code Online (Sandbox Code Playgroud)

所以你可以使用DataTable.Columns集合来确定每列的类型(通过调试器fe)。通过这种方式,您还将找出错误的类型。