2016-05-22 4 views
-1

Использования Linq для SQL я получать из базы данных коллекции анонимного collection.The выглядит следующим образом:Как сортировать коллекцию анонимных типов

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} } 

Я хочу заказать анонимный сбор по идентификатору станции, где каждая станция будет включают список отдельных статусов, и каждый статус будет включать список отдельных дат.
Новая коллекция должна выглядеть следующим образом:

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 

Может кто-нибудь мне помочь?

+1

Не могли бы вы предоставить свой код LINQ? – MaKCbIMKo

ответ

1

Что вам нужно, это группировка, вы можете использовать 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() 
      }); 
Смежные вопросы