Упорядочивание списков в списке в C # - PullRequest
1 голос
/ 04 августа 2011

Мне нужно нажать в правильном направлении в отношении упорядочения данных с помощью Linq.

У меня есть список объектов People в C #, который, в свою очередь, содержит список сайтов, которые человек можетбыть связанным с.

Эти объекты Site являются экземпляром объекта Organization, с которым связан сайт (поскольку у организации может быть много сайтов ..)

Редактировать:Человек будет принадлежать только одной организации в списке.(Спасибо @jonskeet)

Как мне упорядочить список людей, используя Linq (или Lamba), чтобы показать их в алфавитном порядке, по их организации, а затем по фамилии, имени и фамилииконтакт .. ??

Ответы [ 3 ]

3 голосов
/ 04 августа 2011

Меня удивляет, что ваша модель немного испорчена, но если вы уверены, что:

  • У человека будет хотя бы один сайт
  • Все сайты для конкретного человека будут для одной организации

Вы можете использовать:

var sorted = people.OrderBy(p => p.Sites.First().Organization)
                   .ThenBy(p => p.LastName)
                   .ThenBy(p => p.FirstName);
0 голосов
/ 04 августа 2011

Linq поддерживает порядок по пунктам.Проверьте эту ссылку MSDN

http://msdn.microsoft.com/en-us/library/bb383982.aspx

Пример

public class CityLookup
{       public string City { get; set; }    
    public string Country { get; set; }
}

List<CityLookup> citiesLkp =            
new List<CityLookup>            
{       
    new CityLookup{ City = "New Delhi", Country = "India" },          
    new CityLookup{ City = "Sydney", Country = "Australia" },  
    new CityLookup{ City = "Tokyo", Country = "Japan" },                 
    new CityLookup{ City = "New York", Country = "USA" },                
    new CityLookup{ City = "Paris", Country = "France" },                
    new CityLookup{ City = "Barcelona", Country = "Spain" },                                          
};


// Now sort the names based on city name
var myList =    from c in citiesLkp    orderby c.City    select c;

foreach (var record in myList )    
{        
    Console.WriteLine(record.City);    
}
0 голосов
/ 04 августа 2011
people.SelectMany(p => p.Sites).OrderBy(s => s.Organisation.Name).ThenBy(s => s.Organisation.Contact.Surname).ThenBy(s => s.Organisation.Contact.FirstName);
...