是否可以这样做.Sort(p => p.ID);或类似的东西?

时间:2011-04-23 10:44:34

标签: c# linq

在从List<>继承的类中,如何通过键选择器(如Order by)对其进行排序。

public class BusinessRuleCollection : List<BusinessRule>
{
    Read()
    {
         // After the reading here, I wonder if I could do the following:
         this.Sort(p => p.ID);
    }
}

2 个答案:

答案 0 :(得分:6)

您可以添加扩展方法:

public static void Sort<TSource,TValue>(
    this List<TSource> list,
    Func<TSource,TValue> selector)
{
    var comparer = Comparer<TValue>.Default;
    list.Sort((x,y) => comparer.Compare(
        selector(x), selector(y)));
}

应该做什么。

答案 1 :(得分:3)

不完全 - Sort需要Comparison<T>(或IComparer<T>)而p => p.ID无法转换为Comparison<T>。你可以这样做:

Sort((p, q) => p.ID.CompareTo(q.ID))

虽然。或者在MiscUtilProjectionComparer实施了IComparer<T>,因此您可以使用以下内容:

Sort(ProjectionComparer<BusinessRule>.Create(p => p.ID));