Linq查询消息:指定的强制转换无效

时间:2014-02-24 07:13:53

标签: 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();

执行查询后我收到错误。错误是“指定的演员表无效”。 请告诉我我在哪里做错了。

1 个答案:

答案 0 :(得分:3)

我猜Field<int>会导致问题,因为该字段实际上不是int。如前所述,它是string

尝试以下

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

Field<T>不会在不同类型之间执行某些魔术转换。它是这样实现的:

return (T)((object)value);

实际上有更多的代码,但逻辑是相同的。它只是试图将您的值转换为所需的类型,并且您可能知道,将string投射到int不起作用。