C# 列表OrderBy在非基元类型的情况下不起作用
列表排序对于类似于基元(字符串)属性的类型工作正常,但对于类似于非基元的通道则不行。有什么建议吗C# 列表OrderBy在非基元类型的情况下不起作用,c#,linq,list,lambda,C#,Linq,List,Lambda,列表排序对于类似于基元(字符串)属性的类型工作正常,但对于类似于非基元的通道则不行。有什么建议吗 public class Sales : Resource { public Channel ChannelName { get; set; } public string Type { get; set; } } public class Channel:Resource { public string Code { get; set; } } List result=
public class Sales : Resource
{
public Channel ChannelName { get; set; }
public string Type { get; set; }
}
public class Channel:Resource
{
public string Code { get; set; }
}
List result=GetListofSales();//销售清单
result=result.OrderBy(x=>x.Type).ThenBy(**y=>y.ChannelName.code**).ToList();
实际上,我试过了,在下面的示例数据中,它对数据进行了很好的排序
列表=新列表()
结果将是
因此,正如您所见,它先订购A,然后订购B,因为有两个销售类型=C,它根据渠道代码订购,虽然渠道B先添加,然后添加渠道AB,但结果显示渠道AB后添加B,这意味着已应用二级订单by有什么问题?您可以在
频道
类中实现IComparable
,也可以实现并传递icomparaer
,但是您发布的代码对我来说很好。[System.ArgumentException]={“至少一个对象必须实现IComparable”。}@IvanStoev是的,您是对的Ivan。。非常感谢:)我的意思是,使用y.ChannelName.code
而不仅仅是y.ChannelName
有什么问题?由于您的Channel
类可能有多个属性,因此在OrderBy/ThenBy中指定要使用的属性听起来是正确的方法。无论如何:)谢谢大家热情的回复。。在执行@IvanStoev建议以执行IComparable后,其工作正常。
List<Sales> result = GetListofSales(); // list of sales
result = result.OrderBy(x =>x.Type).ThenBy(**y => y.ChannelName.code**).ToList();
Sales sales = new Sales();
sales.ChannelName = new Channel { Code = "B" };
sales.Type = "C";
list.Add(sales);
sales = new Sales();
sales.ChannelName = new Channel { Code = "AB" };
sales.Type = "C";
list.Add(sales);
sales = new Sales();
sales.ChannelName = new Channel { Code = "A" };
sales.Type = "A";
list.Add(sales);
sales = new Sales();
sales.ChannelName = new Channel { Code = "C" };
sales.Type = "B";
list.Add(sales);
sales = new Sales();
sales.ChannelName = new Channel { Code = "D" };
sales.Type = "D";
list.Add(sales);