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)
        {

但是分组依据不起作用。

我做错了什么?

groupBy 使用我的 innerClass 在多个列上

我认为您正在寻找的是按组合键分组...

类似于 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();