web-dev-qa-db-ja.com

linq groupbyでグループ化された値のリストを取得するにはどうすればよいですか?

ここにあるLinq初心者は、クエリによって私の最初のグループと格闘しています。

キーワードを表すKeywordInstanceタイプのオブジェクトのリストと、キーワードが適用されたデータベースレコードのIDがあります。

Keyword      RecordID
macrophages  1
macrophages  2
cell cycle   3 
map kinase   2
cell cycle   1

私が欲しいのは、すべてのキーワードのコレクションと、各キーワードが適用されたRecordIDのリストです。

Keyword     RecordIDs 
macrophages 1, 2
cell cycle  1, 3
map kinase  2

Linqを使用して新しいオブジェクトに入れてみました。明確なキーワードしか取得できませんでした。

var keys = allWords .GroupBy(w => w.keyword).Select(g => new {keyword = g.Key});

問題は、gの値を取得できないように見えることです。 gはタイプIGroupingであり、ドキュメントによると、プロパティKeyのみがあり、プロパティValueはありません。 groupbyについてインターネットで見たすべての例では、g自体を選択するように指示されていますが、

var keywords = allWords
    .GroupBy(w => w.keyword)
    .Select(g => new {keyword = g.Key, RecordIDs = g});

私が欲しいものではありません。

screenshot of result

Gから何かを取得しようとすると、エラーメッセージSystem.Linq.IGropuing<string, UserQuery.KeywordInstance> does not have a definition for [whatever I tried]で失敗します。

私はここで何が間違っているのですか?

8
Rumi P.

私はあなたがあなたの解決策に近いと思います。

var keywords = allWords
    .GroupBy(w => w.keyword)
    .Select(g => new 
           { 
              keyword = g.Key, 
              RecordIDs = g.Select(c => c.ID)
           });

必要なレコードをSelectするだけです。
Keyword-columnと[〜#〜] id [〜#〜]-columnが表示される理由は、その一部であるためです。 g

21
Jens Kloster