在linq C#中找到groupby的原始密钥

时间:2016-08-29 08:40:21

标签: c# linq key

var aaa = data.GroupBy(o => o.Date).Select(o => new { o }).ToList();
var bbb = aaa.Select(o => o.Key).ToList();
//There is a error of `Key`

这是否意味着Key仅允许GroupBy之后的原始列表。在Key之后是否可以获得Select GroupBy?(当然,我们可以在Key = o.Key中隐藏Select

此外,

var aaa = data.GroupBy(o => o.Date).Select(o => o.ToList()}).ToList();

如果我们将aaa更改为二维List,是否可以获取之前的Key

2 个答案:

答案 0 :(得分:2)

在您的第一个linq表达式中,在Select中,您将使用新的匿名对象包装IGrouping的{​​{1}}对象。 因此,要在第二行获取GroupBy属性,您应该:

Key

对于第二个问题,如果您想在这种情况下获得//Original: var bbb = aaa.Select(o => o.Key).ToList(); //Change to: var bbb = aaa.Select(o => o.o.Key).ToList();

Key

原因在于:

  • 您可以按//Original: var aaa = data.GroupBy(o => o.Date) .Select(o => o.ToList()}) .ToList(); //Then you should: var aaa = data.GroupBy(o => o.Date) .Select(o => o.ToList()}) .Select(x => o.FirstOrDefault().Date) .ToList();
  • 对项目进行分组
  • 首先选择您将IGrouping转换为Date,但现在您有一个List<YourClass>,其中IEnumerable<List<YourClass>>中的每条记录,所有内部项目都具有相同的日期
  • 在第二个IEnumerable中 - 获取内部集合中的任何项目 - 并获取Select它与在此示例中获取Date之前相同

要实现您实际获得的目标(按日期分组并获取每个组的符号):

Key

答案 1 :(得分:0)

问题是你的语法不正确。您创建了一个匿名对象,因此您需要使用实例名称访问该属性。所以你应该这样做。

var bbb = aaa.Select(o => o.o.Key).ToList();  
  

如果我们将aaa改为二维列表,是否可以获得   以前的密钥?

不,因为你已经摸索了值集合而不是Key。因此结果不会包含Key