Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在linq C中查找groupby的原始密钥_C#_Linq_Key - Fatal编程技术网

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

C# 在linq C中查找groupby的原始密钥,c#,linq,key,C#,Linq,Key,这是否意味着该键只允许用于GroupBy之后的原始列表。在GroupBy之后,是否有可能获得任何Select的密钥?当然,我们可以将密钥存储在Select中 此外, 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` 如果我们将aaa更改为二维列表,是

这是否意味着该键只允许用于GroupBy之后的原始列表。在GroupBy之后,是否有可能获得任何Select的密钥?当然,我们可以将密钥存储在Select中

此外,

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`

如果我们将aaa更改为二维列表,是否可以获取上一个键?

在第一个linq表达式中,在“选择”中,您将使用新的匿名对象包装从GroupBy获得的IGrouping对象。 因此,要在第二行中获得该键属性,您应该:

var aaa = data.GroupBy(o => o.Date).Select(o => o.ToList()}).ToList();
对于第二个问题,如果您想在这种情况下获得密钥:

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

//Change to:
var bbb = aaa.Select(o => o.o.Key).ToList();
原因是:

您可以按日期对项目进行分组 首先选择将iGroup转换为列表,但现在有了一个IEnumerable,其中IEnumerable中的每个记录,所有内部项都将具有相同的日期 在第二个选项中,选择内部集合中的任何一项,并获取日期,该日期与之前示例中获取密钥的日期相同 要实现您实际需要的功能,请按日期分组并获取每个组的符号:

//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();

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

var result = data.GroupBy(item => item.Date)
                 .Select(group => new { group.Key, Symbols = group.Select(item => item.Symbol).ToList() });

//Or using a different overload of the `GroupBy`:
var result = data.GroupBy(item => item.Date,
                          (key,group) => return new { Key = key, Symbols = group.Select(item => item.Symbol).ToList() });
如果我们将aaa改为二维列表,是否可以获得 上一把钥匙


不,因为您已经摸索了值集合,而不是键。所以结果将不包含键

对不起,第二个问题,假设您之前不知道aaa是GroupByDate,那么您如何知道Key@user6703592-你没有。如果您不知道它是分组的,并且到目前为止集合不是一个IGroupping,那么它们没有键..-只有当结果是像第一个案例中那样的IGroup或wrapping这样的对象时,键属性才存在。因此,var aaa=data.GroupByo=>o.Date.Selecto=>o.Selectp=>new{p.Symbol}.ToList;这种情况下,如果我们丢失了全部信息,是否有可能获得上一个密钥?@user6703592-不,我更倾向于保留对一般情况的解释-如果您分组,然后将结果转换为其他内容,而不保留密钥,那么您就松开了它。谢谢,非常有帮助:
var bbb = aaa.Select(o => o.o.Key).ToList();