Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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#_Linq - Fatal编程技术网

C# 使用动态linq分组后的访问密钥

C# 使用动态linq分组后的访问密钥,c#,linq,C#,Linq,使用我有一个group by语句,如下所示: var rowGrouped = data.GroupBy(rGroup, string.Format("new({0})", c)); 其中c只是我需要在分组中选择的字段名的字符串数组GroupBy在本例中返回一个IEnumerable(注意:不是IEnumerable,因为我们不知道t是什么)。正则表达式将返回一个System.Collections.Generic.IEnumerable 现在我的问题是,我如何遍历这些组以访问密钥(key在i

使用我有一个group by语句,如下所示:

var rowGrouped = data.GroupBy(rGroup, string.Format("new({0})", c));
其中
c
只是我需要在分组中选择的字段名的字符串数组
GroupBy
在本例中返回一个
IEnumerable
(注意:不是
IEnumerable
,因为我们不知道
t
是什么)。正则表达式将返回一个
System.Collections.Generic.IEnumerable

现在我的问题是,我如何遍历这些组以访问密钥(
key
igroupping
中定义,但我事先不知道
TKey
TElement
中)

我最初试过:

foreach (var row in rowGrouped)
它会迭代,但我无法访问
行。键
在本例中是type
对象

所以我这样做了:

foreach (IGrouping<object,dynamic> row in rowGrouped)

我需要能够遍历
行分组
,为每个
获取
,然后遍历每个组中的集合。

问题是,您的键是
,并且您正试图强制转换到键为
对象
的界面。虽然
IGrouping
具有协变类型参数,但它根本不起作用,因为。由于
short
是一种值类型,因此它将不起作用

如果您知道密钥始终是
短的
,则应将其转换为短的

foreach (IGrouping<short, dynamic> row in rowGrouped)
    ...

虽然我个人对此有过一些麻烦。可能是一个bug,但在这种情况下,运行时无法确定该行是否具有
属性。我不能告诉你确切的原因,但请记住。

我想你不能把它叫做“分组”?@Chris:我也试过了。没用。同样的问题。有关更多信息,请参阅:问题是我不知道密钥总是短的。有时是,有时是字符串或其他东西。
foreach(rowGrouped中的动态行)
的问题是我得到了
RuntimeBinderException
消息
'object'不包含“Key”的定义。
这很奇怪,因为当我在调试器中将鼠标悬停在
上时,我可以看到
。对于如何使用查询,我没有太多的上下文,但您必须想出一种方法,使键始终成为引用类型。您可以在分组时执行类似于
data.GroupBy(string.Format(“new({0}as Key)”,rGroup),string.Format(“new({0})”,c))
的操作,然后您只需记住实际的键位于
键的
键的
属性中。当然,还有其他方法可以解决这个问题,但这可能是最简单的实现方法。事实上,这正是我一直在寻找的解决方案。我有一个相关的问题,那就是从不同的角度处理相同的问题,实际上有两个字段,一个是
year
,另一个是
qtr
,我想合并到一个专栏中。我认为将它们选为
new(year,qtr)
实际上解决了这两个问题,我可以将该对象正确格式化为
yearQqt
作为前端的一个问题。
foreach (IGrouping<short, dynamic> row in rowGrouped)
    ...
foreach (dynamic row in rowGrouped)
    ...