C#:Sort / OrderBy枚举值

时间:2012-01-08 20:09:03

标签: c# linq

我有一个IEnumerable,我已经从Linq2Sql中实现了。我已经过滤掉了我想要的记录,现在我想根据选定的枚举来订购它们:

public enum Sort
{
  Time,
  Name,
  Value
}

public class LinqClass
{
   public DateTime Time;
   public string Name;
   public double Value;
}

Sort sort = Sort.Time
items.OrderBy(sort);

最好的方法是什么?我可以创建一个重载的OrderBy(Sort s),它只是一个很大的switch语句:

switch(sort)
  case Time:
    return this.OrderBy(x=>x.Time);

我也可以用字典做点什么。任何其他想法,或有这样做的标准模式。

2 个答案:

答案 0 :(得分:3)

switch语句可能是最好的方法,因为它可以很容易地发现无效值的传递。

可以使用Dictionary<Sort, Func<IEnumerable<LinqClass>, IEnumerable<LinqClass>>>,但我认为这不值得。

答案 1 :(得分:1)

如果您将数据视为List,则可以使用Sort代理的Comparison方法,并从字典中选择比较:

var comparisons = new Dictionary<Sort, Func<LinqClass, LinqClass, int>();
sorting.Add(Sort.Time, (x, y) => x.Time.CompareTo(y.Time));
sorting.Add(Sort.Name, (x, y) => x.Name.ComapreTo(y.Name));
sorting.Add(Sort.Value, (x, y) => x.Value.CompareTo(y.Value));

items.Sort(comparisons[sort]);