1

LINQ を使用して、レポートに使用されるデータを並べ替えようとしています。レポートの構造は次のようになります。


開発者名

日付 | 営業時間 | プロジェクト名 | 週の終了
日 | 営業時間 | プロジェクト名 | 週の終了
日 | 営業時間 | プロジェクト名 | ウィークエンディング

開発者名

日付 | 営業時間 | プロジェクト名 | 週の終了
日 | 営業時間 | プロジェクト名 | ウィークエンディング

開発者名

日付 | 営業時間 | プロジェクト名 | 週の終了
日 | 営業時間 | プロジェクト名 | 週の終了
日 | 営業時間 | プロジェクト名 | ウィークエンディング


そのすべてのデータを .dbml ファイルから取得しています。そのようなソートのために、私はこのlinqクエリを持っています:

DataClasses1DataContext context = new DataClasses1DataContext();
        System.Data.Linq.ISingleResult<s_SummaryReportResult> res = context.s_timesheet_SummaryReport(startDate, endDate);

        var orb = from c in res
                  group c by c.developer
                  into devgroup
                  select new 
                  {   
                      Dev = devgroup.Key,
                      devData = from o in res
                                      select new {
                                        o.Date,
                                        o.Hours,
                                        o.projectname,
                                        o.week_ending
                                      }};

IDictionary dic_orb = orb.ToDictionary(result => result.Dev.ToString(), result => result.devData);


        foreach (KeyValuePair<string, object> item in dic_orb)
        {
          object brr =  item.Value;
        }

悲しいことに、foreach ステップで「InvalidCastException」が発生します。

そのforeachを解決する方法、またはある意味で、そのLINQクエリをより適切にグループ化する方法の手がかりはありますか?

前もって感謝します。

4

2 に答える 2

1

dic_orbはクエリDictionary<string, IEnumerable<'a>>'a定義された匿名型です。型KeyValuePair<string, IEnumerable<'a>>は変換できないKeyValuePair<string, object>ため、無効なキャストです。修正は、ループitemで var を使用して宣言することです。foreach

foreach (var item in dic_orb)
{
    object brr =  item.Value;
}

item.Valueであるため、IEnumerable<'a>使用して反復できます

var brr = item.Value;
foreach(var b in brr)
{
}

ネストされたすべてのコレクションを反復したいだけの場合は、使用できます

foreach(var b in dic_orb.SelectMany(kvp => kvp.Vaue))
{
}
于 2012-05-23T22:06:44.037 に答える
0

result.devData のタイプはobjectですか?

変えるだけ

foreach (KeyValuePair<string, object> item in dic_orb)

foreach (var item in dic_orb)

そして、適切なタイプを自動的に取得する必要があります。それ以外の場合は、タイプを調べて、それdevDataに応じて KeyValuePair を変更してください。

于 2012-05-23T22:02:31.793 に答える