-1

我尝试按 StringId 分组,然后按名称分组

var a = myList
                .GroupBy(item => new TcGroupByKey() 
{StringId = item.Id, ChannelName = item.ChannelName}).ToList();

我创建了这个内部类TcGroupByKey

所以我可以将结果传递给TrackingChannelRowctor

并且会得到强类型参数而不是object

 public TrackingChannelRow(ManageTcModel.TcGroupByKey tcGroupByKey,
            IGrouping<ManageTcModel.TcGroupByKey, TrackingChannelItem> subChannels,
            IEnumerable<Manager.TrackingChannels.Model.ToolbarItem> toolbars,
        IEnumerable<Manager.TrackingChannels.Model.BundleItem> bundles)
        {

但是 group by 不起作用。

我究竟做错了什么?

4

2 回答 2

0

您要求 linq 按他不认识的对象对列表进行分组。

有什么问题:

var a = myList.GroupBy(Id).GroupBy(ChannelName).ToList();
于 2012-04-08T15:02:27.013 回答
0

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

类似于 Marc 在这篇文章Linq to SQL with Group by中描述的内容

关键是使用“匿名”类型 - 而不是像你那样命名的类型 - LINQ 可以转换为 SQL,否则会出现问题并且代码只能运行“post SQL”(所以你先枚举然后分组但丢失SQL 集成、性能)。

所以,在你的情况下,它会是这样的......

new {StringId = item.Id, ChannelName = item.ChannelName}

...代替new TcGroupByKey() {StringId = item.Id, ChannelName = item.ChannelName}

在匿名(有效)或命名类型中执行“选择”也存在类似的问题(不会 - 除非如上所述,您将 SQL 和仅 C# 的表达式部分分开,有点简化)。

希望这可以帮助

于 2012-04-08T16:27:44.790 回答