Как сгруппировать по списку элементов?

Я снова и снова сталкиваюсь с этой проблемой :как мне сгруппировать список объектов по содержанию список других объектов?

У меня есть список объектов типа A, и каждый из этих объектов имеет свойство (, позволяющее назвать его ListProp), которое также является списком. ListPropсодержит элементы типа B. Существует несколько элементов типа Aс идентичными объектамиBListProp, но ссылка на свойство ListPropотличается от элемента к элементу. Как я могу сгруппировать эти объектыA-самым быстрым способом, если объектыBListPropидентичны?

Пример кода:

class Program
{
    static void Main(string[] args)
    {
        var exampleList = new List<A>
        {
            // Should be in first group
            new A { ListProp = new List<B>
            {
                new B { Prop = new C { Number = 0 }},
                new B { Prop = new C { Number = 1 }}
            }},
            // Should be in first group
            new A { ListProp = new List<B>
            {
                new B { Prop = new C { Number = 0 }},
                new B { Prop = new C { Number = 1 }}
            }},
            // Should be in second group
            new A { ListProp = new List<B>
            {
                new B { Prop = new C { Number = 0 }},
                new B { Prop = new C { Number = 1 }},
                new B { Prop = new C { Number = 1 }}
            }},
            // Should be in third group
            new A { ListProp = new List<B>
            {
                new B { Prop = new C { Number = 0 }},
                new B { Prop = new C { Number = 0 }}
            }}
        };

        // Doesn't work because the reference of ListProp is always different
        var groupedExampleList = exampleList.GroupBy(x => x.ListProp);
    }
}

class C
{
    public int Number { get; set; }
    public override bool Equals(object o)
    {
        if (o is C)
            return Number.Equals(((C)o).Number);
        else
            return false;
    }
}

class B
{
    public C Prop { get; set; }
}

class A
{
    public IList<B> ListProp { get; set; }
}
8
задан abatishchev 20 April 2012 в 11:47
поделиться