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});
不是我想要的。
任何尝试从g中获取内容都会失败并显示错误消息System.Linq.IGropuing<string, UserQuery.KeywordInstance> does not have a definition for [whatever I tried]
。
我在这里做错了什么?
答案 0 :(得分:18)
我认为你很接近你的解决方案。
var keywords = allWords
.GroupBy(w => w.keyword)
.Select(g => new
{
keyword = g.Key,
RecordIDs = g.Select(c => c.ID)
});
只需Select
您需要的记录
您看到关键字 - 列以及 ID 列的原因是因为它是g