es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo combinar objetos en una colección por propiedad igual utilizando LINQ?

Tengo una colección de objetos

ObservableCollection nodes = new ObservableCollection() {
new Node(“Node1”, tabs1);
new Node(“Node1”, tabs2);
new Node(“Node1”, tabs3);
new Node(“Node2”, tabs4);
new Node(“Node3”, tabs5);
}

¿Podría decirme cómo de esta colección puedo obtener una colección en la que todos los objetos con el mismo Nombre se unirán en un solo objeto? En mi caso, quiero que los primeros tres elementos de la colección sean uno solo que sería como Node(“Node1”, tabs) donde tabs es igual a tabs1 + tabs2 + tabs3. Por lo tanto, el resultado sería:

ObservableCollection nodes = new ObservableCollection() {
new Node(“Node1”, tabs);
new Node(“Node2”, tabs4);
new Node(“Node3”, tabs5);
}

Sé cómo hacerlo sin Linq, pero tiene demasiado código. Me gustaría hacerlo usando Linq, pero no puedo entender cómo escribir una consulta.

Los objetos de Nodes están representados por una clase simple:

public class SettingNode : ISettingNode
{
public string Name { get; private set; }
public IEnumerable Tabs { get; private set; }
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes utilizar el método GroupBy de Linq para agrupar los objetos en la colección por su propiedad Name. Luego puedes utilizar el método Select para crear una nueva colección de objetos SettingNode con la propiedad Tabs combinada.

    El siguiente código debería hacer el trabajo:

    var groupedNodes = nodes.GroupBy(n => n.Name)
                            .Select(g => new SettingNode { Name = g.Key, Tabs = g.SelectMany(n => n.Tabs) });
    

Comments are closed.