How do I order a Complex List?

-2

How do I sort a complex list? Home I have this list below and I need to sort by TypeName and TypeName :

    public class Tipo()
    {
        public int IdTipo {get; set;}
        public string NomeTipo {get; set;}
        public List<SubTipo> NomeSubTipo {get; set;}    
    }

    public class SubTipo()
    {
        public int IdTipo {get; set;}
        public int IdSubTipo {get; set;}
        public string NomeSubTipo {get; set;}   
    }

    List<Tipo> ListaTipo = new List<Tipo>();

    ListaTipo[0].NomeTipo = "LISTA XYZ"
        ListaSubTipo[0].NomeSubTipo = "B"       
        ListaSubTipo[1].NomeSubTipo = "A"
        ListaSubTipo[2].NomeSubTipo = "C"
    ListaTipo[1].NomeTipo = "LISTA BLA BLA"
        ListaSubTipo[0].NomeSubTipo = "B"
        ListaSubTipo[1].NomeSubTipo = "C"
        ListaSubTipo[2].NomeSubTipo = "A"
    ListaTipo[2].NomeTipo = "LISTA TATATA"
        ListaSubTipo[0].NomeSubTipo = "C"
        ListaSubTipo[1].NomeSubTipo = "B"
        ListaSubTipo[2].NomeSubTipo = "A"

List<Tipo> lreturn = new List<Tipo>();
    lreturn = ListaTipo;

    lreturn.OrderBy(x => x.NomeTipo).OrderBy(x => x.ListaSubTipo.OrderBy(m => m.NomeSubTipo)).ToList();

The following error occurs:

At least one object must implement IComparable.
    
asked by anonymous 03.10.2018 / 14:49

1 answer

5

I think the want is something like this:

List<Tipo> ListaTipo = new List<Tipo>();

ListaTipo.Add(new Tipo()
{
    NomeSubTipo = new List<SubTipo>()
    {
        new SubTipo() { NomeSubTipo = "B" },
        new SubTipo() { NomeSubTipo = "A" },
        new SubTipo() { NomeSubTipo = "C" }
    },
    NomeTipo = "LISTA XYZ"
});

ListaTipo.Add(new Tipo()
{
    NomeSubTipo = new List<SubTipo>()
    {
        new SubTipo() { NomeSubTipo = "B" },
        new SubTipo() { NomeSubTipo = "C" },
        new SubTipo() { NomeSubTipo = "A" }
    },
    NomeTipo = "LISTA BLA BLA"
});

ListaTipo.Add(new Tipo()
{
    NomeSubTipo = new List<SubTipo>()
    {
        new SubTipo() { NomeSubTipo = "C" },
        new SubTipo() { NomeSubTipo = "B" },
        new SubTipo() { NomeSubTipo = "A" }
    },
    NomeTipo = "LISTA TATATA"
});

List<Tipo> lreturn = ListaTipo.OrderBy(x => x.NomeTipo).
    ThenBy(y => y.NomeSubTipo.OrderBy(z => z.NomeSubTipo)).ToList();

I think ThenBy solves your problem.

    
03.10.2018 / 15:21