18

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 关键字 = 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});

不是我想要的。

结果截图

任何从 g 中获取内容的尝试都会失败并显示错误消息System.Linq.IGropuing<string, UserQuery.KeywordInstance> does not have a definition for [whatever I tried]

我在这里做错了什么?

4

1 回答 1

33

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

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

于 2013-11-06T13:27:29.493 回答