2014-02-24 19 views
0

以下是列名及其数据类型:LINQ查询消息:指定的转换无效

TemplateName string 
TaskName  string 
AvgDays  string (but contains int values) 

我的LINQ查询:

DataTable newTable = new DataTable(); 
newTable = (from r in table.AsEnumerable() 
      group r by r.Field<string>("TemplateName") into templates 
      let totalDays = templates.Sum(r => r.Field<int>("AvgDays")) 
      from t in templates 
      group t by new 
      { 
       TemplateName = templates.Key, 
       TaskName = t.Field<string>("TaskName"), 
       TotalDays = totalDays 
      } into tasks 
      select new 
      { 
       tasks.Key.TemplateName, 
       tasks.Key.TaskName, 
       AvgDays = tasks.Sum(r => r.Field<int>("AvgDays")), 
       tasks.Key.TotalDays 
      }).CopyToDataTable(); 

我的查询执行后得到错误。错误是“指定的转换无效”。 请让我知道我在哪里做错了。

回答

3

我猜Field<int>会导致问题,因为该字段不是真的int。正如你之前所说,这是一个string

尝试以下

AvgDays = tasks.Sum(r => int.Parse(r.Field<string>("AvgDays"))), 

Field<T>不执行不同类型之间的一些神奇的转变。它的实现是这样的:

return (T)((object)value); 

实际上有一点点的代码,但逻辑是相同的。它只是试图将你的价值转换为期望的类型,并且正如你可能知道的,铸造stringint不起作用。

+0

我已经添加了你的代码,它的工作正常。谢谢。 –