如何获取linq groupby中的分组值列表?

时间:2013-11-06 13:10:58

标签: linq group-by

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 keywords = allWords         .GroupBy(w => w.keyword)         。选择(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]

我在这里做错了什么?

1 个答案:

答案 0 :(得分:18)

我认为你很接近你的解决方案。

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

只需Select您需要的记录 您看到关键字 - 列以及 ID 列的原因是因为它是g

的一部分