groupBy 使用我的 innerClass 在多个列上
本文关键字:innerClass 我的 groupBy | 更新日期: 2023-09-27 18:30:21
我尝试按 StringId 分组,然后按名称分组
var a = myList
.GroupBy(item => new TcGroupByKey()
{StringId = item.Id, ChannelName = item.ChannelName}).ToList();
我创建了这个内部类TcGroupByKey
这样我就可以将结果传递给TrackingChannelRow
ctor
并且会得到强类型参数而不是object
public TrackingChannelRow(ManageTcModel.TcGroupByKey tcGroupByKey,
IGrouping<ManageTcModel.TcGroupByKey, TrackingChannelItem> subChannels,
IEnumerable<Manager.TrackingChannels.Model.ToolbarItem> toolbars,
IEnumerable<Manager.TrackingChannels.Model.BundleItem> bundles)
{
但是分组依据不起作用。
我做错了什么?
我认为您正在寻找的是按组合键分组...
类似于 Marc 在这篇文章中描述的内容 Linq to SQL with Group by
关键是使用"匿名"类型 - 而不是像您那样命名的类型 - LINQ 可以转换为 SQL,否则会出现问题,并且代码只能运行"后 SQL"(因此您先枚举然后分组,但丢失了 SQL 集成、性能)。
所以,在你的情况下,它会是这样的...
new {StringId = item.Id, ChannelName = item.ChannelName}
。而不是new TcGroupByKey() {StringId = item.Id, ChannelName = item.ChannelName}
选择"执行"为匿名(作品)或命名类型也存在类似的问题(不 - 除非,正如我上面提到的,您将SQL和仅限C#的表达式部分分开,稍微简化一下)。
希望这有帮助
您要求 linq 按他不认识的对象对列表进行分组。
怎么了:
var a = myList.GroupBy(Id).GroupBy(ChannelName).ToList();