如何对特定案例的列表进行排序c#

如何对特定案例的列表进行排序c#,c#,list,sorting,C#,List,Sorting,下面是一个示例代码,我希望通过这种方式获得TotalCharge属性的排序数据 //List<RateStatus> SortedList = objListOrder.OrderByDescending(o=>o.TotalCharge).ToList(); //List SortedList=objListOrder.OrderByDescending(o=>o.TotalCharge.ToList(); 请参阅下面的代码,并指导我如何在desending中对Tota

下面是一个示例代码,我希望通过这种方式获得TotalCharge属性的排序数据

//List<RateStatus> SortedList =  objListOrder.OrderByDescending(o=>o.TotalCharge).ToList();
//List SortedList=objListOrder.OrderByDescending(o=>o.TotalCharge.ToList();
请参阅下面的代码,并指导我如何在desending中对TotalCharge属性进行排序。谢谢

static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            List<RateStatus> oRateCollection = new List<RateStatus>();
            RateStatus oRateStatus = new RateStatus();

            oRateStatus.StatusMsg = "Ok";
            oRateStatus.ErrorMsg = "None";
            oRateStatus.RateDetails.Add(new RateDetails()
            {
                CurrentcyCode = "GBP",
                TotalCharge = 20

            });

            oRateCollection.Add(oRateStatus);

           // i want something like this below
           //List<RateStatus> SortedList =  objListOrder.OrderByDescending(o=>o.TotalCharge).ToList();
        }
    }

    public class RateStatus
    {
        public RateStatus()
        {
            RateDetails = new List<RateDetails>();
        }

        public string StatusMsg
        {
            get;
            set;
        }

        public string ErrorMsg
        {
            get;
            set;
        }

        public List<RateDetails> RateDetails
        {
            get;
            set;
        }
    }

    public class RateDetails
    {
        public string ServiceCode
        {
            get;
            set;
        }

        public string ServiceName
        {
            get;
            set;
        }

        public string CurrentcyCode
        {
            get;
            set;
        }

        public double TotalCharge
        {
            get;
            set;
        }

    }
静态类程序
{
/// 
///应用程序的主要入口点。
/// 
[状态线程]
静态void Main()
{
列表或集合=新列表();
RateStatus oRateStatus=新的RateStatus();
oRateStatus.StatusMsg=“确定”;
oRateStatus.ErrorMsg=“无”;
oRateStatus.RateDetails.Add(新的RateDetails()
{
CurrentcyCode=“GBP”,
总费用=20
});
oRateCollection.Add(oRateStatus);
//我想要下面这样的东西
//List SortedList=objListOrder.OrderByDescending(o=>o.TotalCharge.ToList();
}
}
公营课差饷租值
{
公共差饷租值()
{
RateDetails=新列表();
}
公共字符串StatusMsg
{
收到
设置
}
公共字符串错误消息
{
收到
设置
}
公开价目表详情
{
收到
设置
}
}
公开课差饷详情
{
公共字符串服务代码
{
收到
设置
}
公共字符串服务名
{
收到
设置
}
公共字符串代码
{
收到
设置
}
公共双重总收费
{
收到
设置
}
}
这样就分类了。
oRateStatus.RateDetails.Sort(新的RateStatusComparer());
oRateCollection.Add(oRateStatus);
公共类RateStatusComparer:IComparer
{
公共整数比较(费率详细信息x、费率详细信息y)
{
如果(x.TotalCharge>y.TotalCharge)返回-1;
否则如果(x.TotalCharge
谢谢

下面是代码

由于总费用是一个数值,我们可以使用最小和最大方法进行排序

降序:

List<RateStatus> SortedList = oRateCollection.OrderByDescending(o => o.RateDetails.Max(r => r.TotalCharge)).ToList();
List-SortedList=oRateCollection.OrderByDescending(o=>o.ratedDetails.Max(r=>r.TotalCharge)).ToList();

创建一个实现
IComparer
的类

例如,类似这样的内容:

public class RateStatusComparer: IComparer<RateStatus>
{
    public int Compare(RateStatus x, RateStatus y)
    {
        ... your comparing code here
    }
}

有关详细信息,请参见。

为什么
rate details
是一个列表?这是否意味着可以存在多个项目?如果是,您希望如何排序?请指导我如何按降序对基于数据的TotalCharge属性进行排序。因此,您希望对列表的
oRateCollection
列表或
RateDetails
属性进行排序?希望按降序对oRateCollection进行排序。很抱歉,此操作不起作用。我查了一下分类表,看到随机的数据来了。完全没有排序。我将下面的列表添加到您现有的代码中,并且我的排序列表实例按25,20,5排序<代码>费率状态或费率状态2=新费率状态();oRateStatus2.RateDetails.Add(新的RateDetails(){TotalCharge=5});oRateCollection.Add(oRateStatus2);RateStatus oRateStatus3=新的RateStatus();oRateStatus3.RateDetails.Add(新的RateDetails(){TotalCharge=25});oRateCollection.Add(oRateStatus3)只需在
RateStatusComparer
中编写适当的比较逻辑即可。类似于:如果x.RateDetails.Sum(r=>r.TotalCharge)>y.RateDetails.Sum(r=>r.TotalCharge),则返回-1,如果等于,则返回0,否则返回1。这将确保降序或总和(totalCharge)。@Andy Korneyev:在遵循您的方法后,我解决了这个问题。thanks@AndyKorneyev:您可以像sum(totalCharge)一样使用sum()。但是没有求和,我解决了它。请你解释一下为什么你说要使用sum(0)函数好吗?谢谢
public class RateStatusComparer: IComparer<RateStatus>
{
    public int Compare(RateStatus x, RateStatus y)
    {
        ... your comparing code here
    }
}
var с = new RateStatusComparer();
objListOrder.Sort(c);