以下是列名称及其数据类型:
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();
执行查询后我收到错误。错误是“指定的演员表无效”。 请告诉我我在哪里做错了。
答案 0 :(得分:3)
我猜Field<int>
会导致问题,因为该字段实际上不是int
。如前所述,它是string
。
尝试以下
AvgDays = tasks.Sum(r => int.Parse(r.Field<string>("AvgDays"))),
Field<T>
不会在不同类型之间执行某些魔术转换。它是这样实现的:
return (T)((object)value);
实际上有更多的代码,但逻辑是相同的。它只是试图将您的值转换为所需的类型,并且您可能知道,将string
投射到int
不起作用。