在C#中的列表中排序列表

时间:2011-08-04 14:01:19

标签: linq c#-4.0 sql-order-by

关于使用Linq订购数据,我需要朝着正确的方向努力。

我在C#中有一个People对象列表,而这些对象又包含了该人可能关联的站点列表。

这些Site对象保存是与该站点关联的Organization对象的实例(因为组织可能有许多站点..)

编辑:一个人只会属于列表中的一个组织。 (谢谢@jonskeet)

如何使用Linq(或Lamba)按字母顺序按组织顺序显示人员列表,然后按联系人的姓氏姓氏排序...... ??

3 个答案:

答案 0 :(得分:3)

令我感到震惊的是你的模型有点混乱,但如果你确定:

  • 一个人至少有一个网站
  • 所有特定人员的网站都属于同一个组织

你可以使用:

var sorted = people.OrderBy(p => p.Sites.First().Organization)
                   .ThenBy(p => p.LastName)
                   .ThenBy(p => p.FirstName);

答案 1 :(得分:0)

people.SelectMany(p => p.Sites).OrderBy(s => s.Organisation.Name).ThenBy(s => s.Organisation.Contact.Surname).ThenBy(s => s.Organisation.Contact.FirstName);

答案 2 :(得分:0)

Linq支持order by子句。查看此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);    
}