C#List <list <t>&gt;排序</列表<T>

时间:2012-03-26 13:05:26

标签: c# linq

如何对列表进行排序?

persons.OrderBy(p => p.rate).ToList();

列表(persons)的列表如下所示:

public class Persons : List<Person> { }

当我尝试运行第一个语句时,我收到错误:

  

无法从'System.Collections.Generic.List'转换为   '人'

有没有办法用LINQ做到这一点?

4 个答案:

答案 0 :(得分:5)

仅仅因为它从列表中继承并不意味着你可以像使用它一样使用它。

请记住其他所有内容,将其视为列表使用interfaces IList<T> )。然后,取决于IEnumerableIListICollection等的方法可以看出它可以处理它。

否则,您的Add()(由IList定义)方法在您的班级中未被命名为AddPerson

答案 1 :(得分:3)

你可以用这个陈述来实现它:

var persons = new Persons ();
persons.AddRange(persons.OrderBy(p => p.rate));

答案 2 :(得分:0)

如果您想在所有列表中订购所有人员并将其挤进一个列表中:

var persons = new System.Collections.Generic.List<Persons>();
var trio = new Persons() { new Person(7), new Person(3), new Person(8) };
var pair = new Persons() { new Person(1), new Person(2) };
persons.Add(trio);
persons.Add(pair);

var ordered = persons.SelectMany(p => p).OrderBy(p => p.rate).ToList();

http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx

答案 3 :(得分:0)

要实现SortBy行为,您必须遵循以下三个简单步骤:

  1. 存储旧项目(a。通过将旧列表的所有条目复制到新列表中来存储对旧列表的引用| b。)
  2. 创建容器类的空实例(a。通过创建所需类型的新对象| b。清除旧列表)
  3. 根据需要在空白列表中填写条目,然后根据需要对其进行排序。
  4. 这个小扩展方法应该做技巧:

    public static void SortBy<TList, TItem, TOrder>(this TList source,
                                                    Func<TItem, TOrder> sortFunc)
        where TList : List<TItem>
    {
        var l = source.ToList();
        source.Clear();
        source.AddRange(l.OrderBy(sortFunc));
    }