【问题标题】:How to get a list of the grouped values in linq groupby?如何获取 linq groupby 中的分组值列表?
【发布时间】:2013-11-06 13:10:57
【问题描述】:

这里是 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]

我在这里做错了什么?

【问题讨论】:

  • 我可以想象这个问题是重复的,但是我一定是搜索了错误的关键字,至少我找到的搜索结果对我没有帮助。
  • 我看不出问题——你有一个密钥,并且所有记录都属于那个密钥?您期望g 的记录在哪里 :) ?
  • @JensKloster 我不在乎 g 的记录是什么样的。我需要一个数据结构,它将整数列表“{3, 169, 2179, 2188, 2334, 2389, 2496}”映射到键“FACTOR RECEPTOR”。我以为我会使用 groupby,但显然用错了,从它中取出 g 而不是我需要的。那么问题来了,如何正确使用呢?

标签: linq group-by


【解决方案1】:

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

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

只需Select 您需要的记录。
您看到 Keyword 列和 ID 列的原因是因为它是 g

的一部分

【讨论】:

  • 谢谢,我尝试使用 RecordIDs = g.Values.ID 之类的方法,但从未想过在 g 上使用嵌套查询。
  • 这在使用实体框架查询时似乎不起作用。我必须做一个“哪里”来按每个组键选择记录。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
相关资源
最近更新 更多