.net IList排序类

网上找的,自己加了个System.Nullable`1[System.DateTime]类型(DateTime?),觉得挺不错 放着吧

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;

namespace Business.common
{
    /// <summary>
    /// IList排序类
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class IListSort<T>
    {
        private string _propertyName;
        private bool _sortBy = true;
        private IList<T> _list;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="list">排序的Ilist</param>
        /// <param name="propertyName">排序字段属性名</param>
        /// <param name="sortBy">true升序 false 降序 不指定则为true</param>
        public IListSort(IList<T> list, string propertyName, bool sortBy)
        {
            _list = list;
            _propertyName = propertyName;
            _sortBy = sortBy;
        }
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="list">排序的Ilist</param>
        /// <param name="propertyName">排序字段属性名</param>
        /// <param name="sortBy">true升序 false 降序 不指定则为true</param>
        public IListSort(IList<T> list, string propertyName)
        {
            _list = list;
            _propertyName = propertyName;
            _sortBy = true;
        }

        /// <summary>
        /// IList
        /// </summary>
        public IList<T> List
        {
            get { return _list; }
            set { _list = value; }
        }

        /// <summary>
        /// 排序字段属性名
        /// </summary>
        public string PropertyName
        {
            get { return _propertyName; }
            set { _propertyName = value; }
        }

        /// <summary>
        /// true升序 false 降序
        /// </summary>
        public bool SortBy
        {
            get { return _sortBy; }
            set { _sortBy = value;}
        }

        /// <summary>
        /// 排序,插入排序方法
        /// </summary>
        /// <returns></returns>
        public IList<T> Sort()
        {
            if (_list.Count == 0) return _list;
            for (int i = 1; i < _list.Count; i++) {
                T t = _list[i];
                int j = i;
                while ((j > 0) && Compare(_list[j - 1], t) < 0) {
                    _list[j] = _list[j - 1];
                    --j;
                }
                _list[j] = t;
            }
            return _list;
        }
       
        /// <summary>
        /// 比较大小 返回值 小于零则X小于Y,等于零则X等于Y,大于零则X大于Y
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        private int Compare(T x, T y)
        {
            if (string.IsNullOrEmpty(_propertyName)) throw new ArgumentNullException("没有指字对象的排序字段属性名!");
            PropertyInfo property = typeof( T ).GetProperty(_propertyName);
            if (property == null) throw new ArgumentNullException("在对象中没有找到指定属性!");

            switch (property.PropertyType.ToString()) {
                case "System.Int32" :
                    int int1 = 0;
                    int int2 = 0;
                    if (property.GetValue(x, null) != null) {
                        int1 = Convert.ToInt32(property.GetValue(x, null));
                    }
                    if (property.GetValue(y, null) != null) {
                        int2 = Convert.ToInt32(property.GetValue(y, null));
                    }
                    if (_sortBy) {
                        return int2.CompareTo(int1);
                    }
                    else {
                        return int1.CompareTo(int2);
                    }
                    break;
                case "System.Double":
                    double double1 = 0;
                    double double2 = 0;
                    if (property.GetValue(x, null) != null) {
                        double1 = Convert.ToDouble(property.GetValue(x, null));
                    }
                    if (property.GetValue(y, null) != null) {
                        double2 = Convert.ToDouble(property.GetValue(y, null));
                    }
                    if (_sortBy) {
                        return double2.CompareTo(double1);
                    }
                    else {
                        return double1.CompareTo(double2);
                    }
                    break;
                case "System.String" :
                    string string1 = string.Empty;
                    string string2 = string.Empty;
                    if (property.GetValue(x, null) != null) {
                        string1 = property.GetValue(x, null).ToString();
                    }
                    if (property.GetValue(y, null) != null) {
                        string2 = property.GetValue(y, null).ToString();
                    }
                    if (_sortBy) {
                        return string2.CompareTo(string1);
                    }
                    else {
                        return string1.CompareTo(string2);
                    }
                    break;
                case "System.DateTime":
                    DateTime DateTime1 = DateTime.Now;
                    DateTime DateTime2 = DateTime.Now;
                    if (property.GetValue(x, null) != null) {
                        DateTime1 = Convert.ToDateTime(property.GetValue(x, null));
                    }
                    if (property.GetValue(y, null) != null) {
                        DateTime2 = Convert.ToDateTime(property.GetValue(y, null));
                    }
                    if (_sortBy) {
                        return DateTime2.CompareTo(DateTime1);
                    }
                    else {
                        return DateTime1.CompareTo(DateTime2);
                    }
                    break;

              case "System.Nullable`1[System.DateTime]":
                    DateTime DateTime3 = DateTime.Now;
                    DateTime DateTime4 = DateTime.Now;
                    if (property.GetValue(x, null) != null)
                    {
                        DateTime3 = Convert.ToDateTime(property.GetValue(x, null));
                    }
                    if (property.GetValue(y, null) != null)
                    {
                        DateTime4 = Convert.ToDateTime(property.GetValue(y, null));
                    }
                    if (_sortBy)
                    {
                        return DateTime4.CompareTo(DateTime3);
                    }
                    else
                    {
                        return DateTime3.CompareTo(DateTime4);
                    }
                    break;
            }
            return 0;
        }
    }
}


=====================================调用

 IList<MVote> list=new MVoteClassDAL().lazilyLoad(int.Parse(Request.QueryString["Id"])).M_Votes;  
            this.GridView1.DataSource = new IListSort<MVote>(list, "SortOrder").Sort();
            this.GridView1.DataBind();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值