groupBy使用我的内部类在多个列上

时间:2012-04-08 14:48:39

标签: c# linq

我尝试按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)
        {

但是这个小组不起作用。

我做错了什么?

2 个答案:

答案 0 :(得分:0)

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

出了什么问题:

var a = myList.GroupBy(Id).GroupBy(ChannelName).ToList();

答案 1 :(得分: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#-only表达式部分分开,稍微简化一点)。 / p>

希望这会有所帮助

相关问题