Prashant Khadatkar
Prashant Khadatkar

Reputation: 200

Linq Query Message: Specified cast is not valid

Following are the columns name and its data type:

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

my LINQ query:

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();

I am getting error after execution of query. Error is "Specified cast is not valid.". Please let me know where am I doing wrong.

Upvotes: 0

Views: 1236

Answers (1)

MarcinJuraszek
MarcinJuraszek

Reputation: 125620

I guess Field<int> causes the problem, because the field is not really an int. As you said before, it's a string.

Try following

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

Field<T> does not perform some magic transformation between different types. It's implemented like that:

return (T)((object)value);

In practice there is a little bit more code, but logic is the same. It just tried to cast your value to desired type, and as you probably know, casting string to int does not work.

Upvotes: 3

Related Questions