我有一个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);
我也可以用字典做点什么。任何其他想法,或有这样做的标准模式。
答案 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]);