如何对特定案例的列表进行排序c#
下面是一个示例代码,我希望通过这种方式获得TotalCharge属性的排序数据如何对特定案例的列表进行排序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
//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);