C# 如何对匿名类型集合进行排序

C# 如何对匿名类型集合进行排序,c#,linq,C#,Linq,使用Linq to SQL I从数据库匿名集合获取。该集合如下所示: 1. { PS_DID = 523, ID = 2, TITLE = "Station1", ACTIVE = 1, status = null, validFrom = null } 2. { PS_DID = 402, ID = 4, TITLE = "Station2", ACTIVE = 1, status = null, validFrom = null } 3. { PS_DID = 8, ID = 152, TI

使用Linq to SQL I从数据库匿名集合获取。该集合如下所示:

1. { PS_DID = 523, ID = 2, TITLE = "Station1", ACTIVE = 1, status = null, validFrom = null }
2. { PS_DID = 402, ID = 4, TITLE = "Station2", ACTIVE = 1, status = null, validFrom = null }
3. { PS_DID = 8, ID = 152, TITLE = "Station3", ACTIVE = 1, status = 5, validFrom = {5/26/2015 12:00:01 AM} }    
4. { PS_DID = 8, ID = 152, TITLE = "Station3", ACTIVE = 1, status = 5, validFrom = {5/26/2015 12:00:01 AM} }
5. { PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1, status = 5, validFrom = {1/12/2016 12:00:01 AM} }
6. { PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1, status = 5, validFrom = {12/1/2015 12:00:01 AM} }
7. { PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1, status = 3, validFrom = {3/20/2016 12:00:01 AM} }
8. { PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1, status = 1, validFrom = {5/19/2016 11:07:00 PM} }
9. { PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1, status = 1, validFrom = {5/20/2016 3:50:00 PM} }
我想按站点ID订购匿名集合,其中每个站点将包括一个不同状态的列表,每个状态将包括一个不同日期的列表。
新集合应如下所示:

1.  PS_DID = 523, ID = 2, TITLE = "Station1", ACTIVE = 1, status = null, validFrom = null 
2.  PS_DID = 402, ID = 4, TITLE = "Station2", ACTIVE = 1, status = null, validFrom = null 
3.  PS_DID = 8, ID = 152, TITLE = "Station3", ACTIVE = 1, 
 - status 
    * 5 - (validFrom = 5/26/2015 12:00:01 AM) 
4.  PS_DID = 13, ID = 75, TITLE = "Station4", ACTIVE = 1
 - status 
    * 5 - validFrom 
       * 1/12/2016 12:00:01 AM
       * 2/1/2015 12:00:01 AM
    * 3 - validFrom 
       * 3/20/2016 12:00:01 AM
    * 1 - validFrom
       * 5/19/2016 11:07:00 PM
       * 5/20/2016 3:50:00 PM

有人能帮我吗

您需要的是分组,您可以为此使用
Linq

您必须对输入集合进行两次分组,一次在
ID
字段,然后在
status
字段

var results= collection.GroupBy(g=> new {g.PS_DID,  g.ID , g.TITLE,  g.ACTIVE})
          .OrderBy(x=>x.Key.PS_DID)
          .Select(x=> new 
           {
                PS_DID = g.Key.PS_DID,
                ID = g.Key.ID,
                TITLE = g.Key.TITLE,
                ACTIVE = g.Key.ACTIVE,
                STATUS_VALID_DATE = x.GroupBy(g=> g.status)
                                     .Select(s=> new {
                                          status = s.Key, 
                                          validFrom = s.Select(v=>v.validrom).ToList() 
                                     }).ToList()
           });

你能提供你的LINQ代码吗?