我有许多实体,并且我想编写一些通用的排序类,它可以为我提供给定对象和属性的排序列表。例如:
Class Country
{
public int id { get; set; }
public string CountryName { get; set; }
}现在,我应该能够将未排序的列表和应该排序的属性名一起传递给我的排序程序类。到现在为止,我已经打败了自己很长一段时间,现在卡住了。任何帮助都将不胜感激。
发布于 2012-08-28 03:43:34
通过使用.NET LINQ扩展方法,或者更具体地说,使用Dynamic LINQ节,可以很容易地实现按属性名称排序。看看Scott Gu写的关于它是如何工作的Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)。本质上,您的排序类只需是LINQ扩展OrderBy和OrderByDescending的花哨包装器。
下面是一个例子:
var sortedCountries = listOfCountries.OrderBy("CountryName");或者,如果您熟悉泛型,可以编写一个接受集合的包装器和一个用于选择属性值的Func<TSource, TKey>,如下所示:
public class MySorterClass
{
public IEnumerable<TSource> OrderList<TSource, TKey>(IEnumerable<TSource> list, Func<TSource, TKey> selector)
{
return list.OrderBy(selector);
}
public IEnumerable<TSource> OrderList<TSource>(IEnumerable<TSource> list, string propertyName)
{
return list.OrderBy(propertyName);
}
}发布于 2012-08-28 01:06:11
如果您使用的是Java,请看一下Collections.Sort(...)。有两个版本,我认为一个是使用元素的自然顺序对它们进行排序(看看Compareable接口),另一个是Comparator。这两个都应该行得通。除此之外,我相信其他语言也有非常相似的东西。
发布于 2012-08-28 01:07:31
解决方法:
你没有提到一门语言。在c#中,您可以让您的类实现接口IComparable并添加CompareTo函数,该函数接受两个参数并返回较大的一个,或者使用匿名函数执行相同的操作。
https://stackoverflow.com/questions/12146248
复制相似问题