I’m trying to group a generic List<> in C#. The code compiles, but the application (Silverlight) throws the following error (CharOpps is the class of objects in the list I’m trying to group):
Unhandled Error in Silverlight Application Unable to cast object of type ‘Grouping[System.DateTime,Invoc_SalesDashboard.ChartOpps]’ to type ‘Invoc_SalesDashboard.ChartOpps’.
Here’s the code:
var newtemplist = list.GroupBy(opp =>
new DateTime(opp.EstimatedCloseDate.Year, opp.EstimatedCloseDate.Month, 1)).OrderBy(opp => opp.Key);
I’ve also tried:
var newtemplist =
from opp in list
orderby opp.EstimatedCloseDate
group opp by new { opp.EstimatedCloseYear, opp.EstimatedCloseMonth };
ChartOpps have a revenue value, and the EstimatedCloseDate value. What I’m hoping to end up with is a list of ChartOpps with the revenue aggregated in the year/month groupings.
foreach (ChartOpps c in newtemplist)
{
ErrorBox.Text += "o";
}
You’re not showing us what you’re doing with the result
newtemplist. The runtime error message indicates that you are taking a group and trying to treat it as an instance ofChartOppswhich is clearly impossible. Show us that code and we can help you fix it.Edit:
Okay, now the problem is clear. To enumerate the results of the grouping, you need to proceed as follows:
The result of
newtemplistis a sequence of sequences, each sequence having all of its elements having the same value ofnew DateTime(opp.EstimatedCloseDate.Year, opp.EstimatedCloseDate.Month, 1). Therefore, to enumerate this sequence of sequences, you first have to enumerate the groups, and then within each group enumerate the instances ofChartOpps.