首页 文章

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

提问于
浏览
6

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).Select(g => new );

问题是我似乎无法以任何方式获得g的值 . g是IGrouping类型,通过文档,它只有属性Key,但甚至没有属性Value . 我在互联网上看到的所有例子只是告诉我选择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 回答

  • 16

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

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

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

相关问题