【问题标题】:Linq : Unable to cast object of type 'system.double' to type 'system.string'Linq:无法将“system.double”类型的对象转换为“system.string”类型
【发布时间】:2017-11-18 23:42:36
【问题描述】:

Dt 包含 LOADERID 300 公司名称印度

var test = from t in Dt.AsEnumerable()
           group t by t.Field<string>("LOADERID") into g
           select new
           { 
              cr = g.Key,
             count = g.Count(),
           };

在遍历 linq 结果时:

foreach(var temp in test) -> throwing error
{
//Code
}

无法将“system.double”类型的对象转换为“system.string”类型

请提出我做错了什么。 谢谢

【问题讨论】:

  • 你在哪里使用temp?尝试理解这里迭代的含义
  • 也许 LOADERID 是双精度的?
  • @KernelMode 它没有进入 foreach 循环
  • 那么你能解释一下这两段代码是如何相关的吗?
  • 不要一次做很多事情,而是分步进行。这样您就可以确定哪个步骤引发了异常。 (我仍然认为这是因为 LOADERID 是双精度数。这是唯一明显的强制转换为字符串的地方,如果类型不匹配,Field&lt;T&gt; 被记录为引发InvalidCastException,而不是尝试转换。 )

标签: c# linq


【解决方案1】:

根据您的数据LOADERID = 300,很明显您正在尝试将double 转换为string。您必须使用正确的数据类型:

var test = from t in Dt.AsEnumerable()
           group t by t.Field<double>("LOADERID") into g
           select new
           { 
              cr = g.Key,
              count = g.Count(),
           };

或者,如果数据类型在后续代码中不重要,您可以使用索引器代替Field&lt;T&gt;

var test = from t in Dt.AsEnumerable()
           group t by t["LOADERID"] into g
           select new
           { 
              cr = g.Key,
              count = g.Count(),
           };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多