如何对列表进行排序?
persons.OrderBy(p => p.rate).ToList();
列表(persons
)的列表如下所示:
public class Persons : List<Person> { }
当我尝试运行第一个语句时,我收到错误:
无法从'System.Collections.Generic.List'转换为 '人'
有没有办法用LINQ做到这一点?
答案 0 :(得分:5)
仅仅因为它从列表中继承并不意味着你可以像使用它一样使用它。
请记住其他所有内容,将其视为列表使用interfaces
( IList<T> )。然后,取决于IEnumerable
,IList
,ICollection
等的方法可以看出它可以处理它。
否则,您的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
行为,您必须遵循以下三个简单步骤:
这个小扩展方法应该做技巧:
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));
}