Me encuentro con este problema una y otra vez: ¿cómo puedo agrupar una lista de objetos por una lista que contiene otros objetos?¿Cómo puedo agrupar por una lista de elementos?
Tengo una lista de objetos del tipo A
y cada uno de estos objetos tiene una propiedad (vamos a llamarlo ListProp
) que es una lista también. ListProp
tiene elementos del tipo B
. Hay varios elementos del tipo A
con idéntico B
-objetos en ListProp
, pero la referencia de propiedad ListProp
difiere de un elemento a otro. ¿Cómo puedo agrupar estos objetos A
de la manera más rápida, donde los objetos B
en ListProp
son idénticos?
Código de ejemplo:
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; }
}
Por qué la última debería ser el tercer grupo? Debería estar en primer lugar, ¿no? – abatishchev
Porque la cantidad de elementos debería ser la misma también. 0,1! = 0,1,1 – germanSharper
Ok, eso fue una edición incorrecta. Despejado ahora. – abatishchev