List.GroupBy<&燃气轮机;使用LInq时出错

List.GroupBy<&燃气轮机;使用LInq时出错,linq,list,silverlight-4.0,group-by,Linq,List,Silverlight 4.0,Group By,我正在尝试用C#对一个通用列表进行分组。代码可以编译,但应用程序(Silverlight)抛出以下错误(CharOpps是我试图分组的列表中的对象类): Silverlight应用程序中的未处理错误无法将“Grouping[System.DateTime,Invoc_SalesDashboard.ChartOps]”类型的对象强制转换为“Invoc_SalesDashboard.ChartOps” 代码如下: var newtemplist = list.GroupBy(opp =>

我正在尝试用C#对一个通用列表进行分组。代码可以编译,但应用程序(Silverlight)抛出以下错误(CharOpps是我试图分组的列表中的对象类):

Silverlight应用程序中的未处理错误无法将“Grouping[System.DateTime,Invoc_SalesDashboard.ChartOps]”类型的对象强制转换为“Invoc_SalesDashboard.ChartOps”

代码如下:

var newtemplist = list.GroupBy(opp =>
                        new DateTime(opp.EstimatedCloseDate.Year, opp.EstimatedCloseDate.Month, 1)).OrderBy(opp => opp.Key);
我也试过:

                        var newtemplist =
                        from opp in list
                        orderby opp.EstimatedCloseDate
                        group opp by new { opp.EstimatedCloseYear, opp.EstimatedCloseMonth }; 
ChartOpp具有收入值和估计的CloseDate值。我希望最终得到的是一份按年度/月度分组汇总收入的图表

                        foreach (ChartOpps c in newtemplist)
                    {
                        ErrorBox.Text += "o";
                    }

您没有向我们展示您对结果所做的操作
newtemplist
。运行时错误消息表示您正在获取一个组,并试图将其视为
chartops
的实例,这显然是不可能的。向我们展示该代码,我们可以帮助您修复它

编辑:

好了,现在问题清楚了。要枚举分组的结果,需要按以下步骤进行:

foreach(var group in newtemplist) {
    foreach(ChartOpps c in group) {
        // do something with c here
    }
}

newtemplist
的结果是一个序列,每个序列的所有元素都具有相同的值
new DateTime(opp.EstimatedCloseDate.Year,opp.EstimatedCloseDate.Month,1)
。因此,要枚举此序列,首先必须枚举组,然后在每个组中枚举
chartops

的实例,但不了解您的类结构,下面是一个基本尝试:

List<CharOpps> list = GetList();

var newtemplist =
    from opp in list
    group opp by opp.EstimatedCloseYear into g
    select new { g = g.Key, CharOpps = g };
List List=GetList();
新雇主=
来自列表中的opp
按opp分组opp.EstimatedCloseYear到g
选择新的{g=g.Key,CharOpps=g};

如果您将var从图片中删除,一切都会变得清晰

IEnumerable<IGrouping<DateTime, ChartOpps>> newtemplist = list
  .GroupBy(opp => new DateTime(
     opp.EstimatedCloseDate.Year,
     opp.EstimatedCloseDate.Month,
     1))
  .OrderBy(opp => opp.Key); 


foreach (ChartOpps c in newtemplist) 
{ 
  ErrorBox.Text += "o"; 
} 

感谢Jason-我更新了帖子,展示了我正在做的事情和我希望完成的事情。+1,感谢你让海报张贴发生异常的那一行。太棒了!谢谢我不理解分组对象和要分组的对象之间的区别。我需要进一步研究——有时候我们自学成才的人不知道我们不知道的东西。再次感谢!
foreach(IGrouping<DateTime, ChartOpps> g in newtemplist)
{
  foreach (ChartOpps c in g) 
  { 
    ErrorBox.Text += "o"; 
  } 
}