gpt4 book ai didi

c# - 使用动态 linq 分组后的访问 key

转载 作者:太空狗 更新时间:2023-10-29 23:30:55 25 4
gpt4 key购买 nike

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

var rowGrouped = data.GroupBy(rGroup, string.Format("new({0})", c));

在哪里c只是我需要在分组中选择的字段名称的字符串数组。 GroupBy在这种情况下返回 IEnumerable (注意:不是 IEnumerable<T> 因为我们不知道 T 是什么)。常规GroupBy会返回 System.Collections.Generic.IEnumerable<IGrouping<TKey, TElement>>

现在我的问题是,如何遍历组以便我可以访问 key (KeyIGrouping<TKey, TElement> 中定义,但我不知道 TKeyTElement a先验)?

我最初试过这个:

foreach (var row in rowGrouped)

迭代,但我无法访问 row.Key ( row 在这种情况下是类型 object )

所以我这样做了:

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

令人惊讶的是,只要键是一个字符串,它就可以工作。但是,如果键恰好是数字(例如 short ),那么我会收到此错误:

Unable to cast object of type 'Grouping`2[System.Int16,DynamicClass2]' to type 
'System.Linq.IGrouping`2[System.Object,System.Object]'.

我需要能够遍历 rowGrouped并得到 Key对于每个 row然后遍历每个组中的集合。

最佳答案

问题是你的 key 是 short并且您正在尝试转换为键为 object 的界面.同时 IGrouping<>具有协变类型参数,它根本无法工作,因为 variance only applies to reference types .自 short是一个值类型,它不会起作用。

如果你知道 key 永远是 short ,你应该这样投它。

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

否则,如果它可能是值类型或引用类型,则将整行保留为 dynamic 可能更容易。 .

foreach (dynamic row in rowGrouped)
...

虽然我个人在这方面遇到过麻烦。也许是一个错误,但运行时无法确定该行有一个 Key在这种情况下的属性(property)。我无法确切地告诉您原因,但请记住这一点。

关于c# - 使用动态 linq 分组后的访问 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26021397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com