2010-11-24 73 views
0

我想在C#中將通用列表<>分組。代碼編譯,但應用程序(Silverlight)引發以下錯誤(CharOpps是我試圖分組的列表中的對象類別):List.GroupBy <>使用LInq的錯誤

Silverlight應用程序中的未處理錯誤無法投射類型爲'Grouping [ System.DateTime,Invoc_SalesDashboard.ChartOpps]'鍵入'Invoc_SalesDashboard.ChartOpps'。

下面的代碼:

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 }; 

ChartOpps有一個收入值,和值EstimatedCloseDate。我希望最終得到的是一個ChartOpps列表,其中的收入按年/月分組彙總。

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

回答

1

您沒有向我們展示您的結果newtemplist。運行時錯誤信息表明您正在接受一個組,並試圖將其視爲ChartOpps的實例,這顯然是不可能的。向我們顯示該代碼,我們可以幫助您解決問題。

編輯:

好的,現在問題很明顯。枚舉分組的結果,需要進行如下操作:

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)相同值其元素的每個序列。因此,要枚舉這個序列序列,首先必須枚舉組,然後在每個組中枚舉ChartOpps的實例。

+0

感謝傑森 - 我更新了帖子,以顯示我在做什麼,什麼我希望能完成。 – Andy 2010-11-24 19:43:19

0

不知道你的類結構什麼,這裏是一個基本的嘗試:

List<CharOpps> list = GetList(); 

var newtemplist = 
    from opp in list 
    group opp by opp.EstimatedCloseYear into g 
    select new { g = g.Key, CharOpps = g }; 
0

如果採取了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"; 
} 

將newtemplist的第一個元素賦值給c會發生錯誤。 c被允許引用ChartOpps實例。 newtemplist的第一個元素是IGrouping<DateTime, ChartOpps>,而不是ChartOpps。在foreach中的隱式轉換失敗,並且你得到一個運行時異常。

嘗試,而不是:

foreach(IGrouping<DateTime, ChartOpps> g in newtemplist) 
{ 
    foreach (ChartOpps c in g) 
    { 
    ErrorBox.Text += "o"; 
    } 
}