【问题标题】:Order grouped data with LINQ使用 LINQ 对分组数据进行排序
【发布时间】:2011-06-10 08:00:49
【问题描述】:

这是我从数据库中读取到数据表中的数据。

名为 table 的数据表现在已重新调整。

对于每个相同/不同的 UnitType + UnitZoom + MemberZoom,我创建一个新单元并将 MemberId 读入 MemberListId - 这应该按照 MemberOrder 的编号给出的顺序发生。样本数据:

Unit1: A B C --> P1,P2
单元 2:1 2 3 --> P9,P12,P4
Unit3: H23 B10 T15 -->X4,T5,Z3,Y1

我现在的代码没有正确排序:

 var groupedCollection = table.AsEnumerable()
                                        .GroupBy(row => new
                                        {
                                            UType = row.Field<string>("UnitType"),
                                            UZoom = row.Field<string>("UnitZoom"),
                                            MZoom = row.Field<string>("MemberZoom"),
                                            MOrder = row.Field<int>("MemberOrder"), 
  // I DO NOT WANT the MemberOrder to be in the Group Key, but later on I use this Property to order by it... 
                                        });         


                var unitCollection = groupedCollection
                                    .Select(g => new Unit 
                                    {
                                        UnitType = g.Key.UType,
                                        UnitZoom = g.Key.UZoom,
                                        MemberZoom = g.Key.MZoom,                                   
                                        MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList(),
                                    });

                List<Unit> units = unitCollection.ToList(); 

【问题讨论】:

    标签: c# linq group-by extension-methods


    【解决方案1】:

    列表的静态值排序:

    MemberIdList = g.Select(r => r.Field<string>("MemberId")).OrderBy(b => g.Key.MOrder).ToList()
    

    你应该使用这样的东西:OrderBy(b =&gt; b.SomeValue)

    应该是这样的:

    var groupedCollection = table.AsEnumerable()
                                        .GroupBy(row => new
                                        {
                                            UType = row.Field<string>("UnitType"),
                                            UZoom = row.Field<string>("UnitZoom"),
                                            MZoom = row.Field<string>("MemberZoom") 
                                        });         
    
    
                var unitCollection = groupedCollection
                                    .Select(g => new Unit 
                                    {
                                        UnitType = g.Key.UType,
                                        UnitZoom = g.Key.UZoom,
                                        MemberZoom = g.Key.MZoom,                                   
                                        MemberIdList = g.OrderBy(b => b.Field<int>("MemberOrder").Select(r => r.Field<string>("MemberId")).ToList(),
                                    });
    
                List<Unit> units = unitCollection.ToList();
    

    【讨论】:

      猜你喜欢
      • 2016-06-28
      • 2021-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多