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