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);