2010-11-24 7 views
0

C#で汎用リスト<をグループ化しようとしています。コードはコンパイルされますが、アプリケーション(Silverlight)は次のエラーをスローします(CharOppsはグループ化しようとしているリスト内のオブジェクトのクラスです)。List.GroupBy <> LInqを使用しているエラー

未処理のエラー ' System.DateTime、Invoc_SalesDashboard.ChartOpps] 'を入力して' Invoc_SalesDashboard.ChartOpps 'と入力します。

     var newtemplist = 
         from opp in list 
         orderby opp.EstimatedCloseDate 
         group opp by new { opp.EstimatedCloseYear, opp.EstimatedCloseMonth }; 

ChartOpps収益値を持っている、とEstimatedCloseDate値:私も試した

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

は、ここでは、コードです。私が最終的に期待しているのは、年/月の集計で集計された収益を持つChartOppのリストです。

     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

+0

+1、例外が発生した行を投稿するようにポスターに尋ねてくれてありがとう。 –

+0

ブリリアント!ありがとう!私はグループ化オブジェクトとグループ化されるオブジェクトの違いを理解していませんでした。私はさらにそれを勉強する必要があります - 時には私たちは、私たちが知らないものを知りません。再度、感謝します! – Andy

0

は、基本的な試みです:あなたは絵のうち、VARを取る場合

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

、それはすべてが明らかになりました。

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

エラーがCにnewtemplistの最初の要素の割り当てで発生します。 cはChartOppsのインスタンスを参照することができます。 newtemplistの最初の要素はIGrouping<DateTime, ChartOpps>であり、ChartOppsではありません。 foreach内の暗黙のキャストが失敗し、実行時例外が発生します。

ではなく、試してみてください。

foreach(IGrouping<DateTime, ChartOpps> g in newtemplist) 
{ 
    foreach (ChartOpps c in g) 
    { 
    ErrorBox.Text += "o"; 
    } 
} 
関連する問題