在linq查询中指定的类型转换无效。

4

除了试错之外,是否有其他方法可以指定是哪个字段导致了问题并且正确的字段类型是什么?

我收到以下异常:

指定的强制转换无效。

 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")

                                  };

现在如果我删除startBal,prevMon,added,就不会出现异常。

注意:前面的字段是COUNTSUM SQL查询的结果。


这些字段中有任何一个可能为空吗? - Andrei
1个回答

6

没有直接的方法可以检测出哪个字段出了问题。

回答你的第二个问题,如何找到正确的字段类型:

Type fieldType = dtGivenBal.Columns["startBal"].DataType;

因此,您可以使用DataTable.Columns集合确定每个列的类型(例如通过调试器)。通过这种方式,您还将发现错误类型。


1
非常感谢,你节省了我的时间 :) - Anyname Donotcare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接