0

学生のリストを姓の最初の文字でグループ化する次のクエリを検討してください。

var query = from s in students
            group s by s.Last[0] into group1
            orderby group1.Key
            from g in group1
            select new { g.First, g.Last }

ここで、from g in group1のキーを反復処理するのではなくgroup1、 の各キーの値を反復処理するという部分group1です。

これは、(フラットリストを作成するために)処理する方法ですが、直感に反するようです。

私の質問に答えるには、これを説明する MSDN の部分、または私が直感に反する理由を説明してくれる人が必要です ;-)

4

1 に答える 1

1

クエリ式に2 次from句を導入すると、それは への呼び出しに変換されますSelectMany。あなたが言うように、それは基本的に平坦化操作です。

2 つのクエリに変換する方が簡単な場合があります。

var groups = from s in students
             group s by s.Last[0];

var query = from grp in groups
            orderby grp.Key
            from item in grp
            select new { item.First, item.Last };

これは元のクエリとまったく同じですが、理解しやすいかもしれません。

役立つその他のリソース...ここで、Edulinqは私が書いた一連のブログ投稿であり、教育目的で LINQ to Objects をゼロから再実装しています。

于 2012-07-03T19:29:04.267 に答える