Сделайте определенный метод группировки в классе - PullRequest
0 голосов
/ 31 января 2019

У меня есть объект <Repere>, структура которого следующая:

class Repere
{
    public string Name { get; set; }
    public List<Operation> Operations { get; set; }
    public int Quantite {get;set;}
    ...
}

Когда я хочу сгруппировать List<Repere> по его имени, я всегда использую следующий метод группировки:

List<Repere> liste_rep_group = liste_rep.GroupBy(l => l.Name)
    .Select(cl => new Repere
    {
        Quantite = cl.Sum(c => c.TotalQuantity),
        TotalQuantity = cl.Sum(c => c.TotalQuantity),
        ID = -1,
        IdAff = cl.First().IdAff,
        Name = cl.First().Name,
        NameOri = cl.First().Name,
        Nom_aff = cl.First().Nom_aff,
        Profil = cl.First().Profil,
        Longueur = cl.First().Longueur,
        Hauteur = cl.First().Hauteur,
        Largeur = cl.First().Largeur,
        Poids = cl.First().Poids,
        Priorite = cl.Min(c => c.Priorite),
        Matiere = cl.First().Matiere,
        Angle1 = cl.First().Angle1,
        Angle2 = cl.First().Angle2,
        AngleAile1 = cl.First().AngleAile1,
        AngleAile2 = cl.First().AngleAile2,
        GroupeProfil = cl.First().GroupeProfil,
        ListOperations = (cl.SelectMany(g=>g.ListOperations).GroupBy(o=>o.ID)
            .Select(go => new Operation
                {
                    ID = go.First().ID,
                    QtyFinished = go.Sum(o => o.QtyFinished),
                    Color=go.First().Color,
                })).ToList()
        ...
    }).ToList();

То, что я хотел бы сделать, это добавить в свой класс. Повторить метод, подобный

public List<Repere> GroupByName(List<Repere>)
{
   //My grouping method
}

Так что каждый раз, когда мне нужно сгруппировать свою List<Repere>, мне не нужно копировать всю функциювезде. Основная причина в том, что когда я изменяю структуру Repere, мне нужно редактировать функцию, и есть риск забыть обновить ее где-нибудь.

1 Ответ

0 голосов
/ 31 января 2019

Вы можете написать метод расширения на List<Repere> для достижения намеченного поведения.

public static class ListRepereExtensionMethods
{
    public static List<Repere> GroupByName(this List<Repere> liste_rep)
    {
        List<Repere> liste_rep_group = liste_rep.GroupBy(l => l.Name)
            .Select(cl => new Repere
            {
                Quantite = cl.Sum(c => c.TotalQuantity),
                TotalQuantity = cl.Sum(c => c.TotalQuantity),
                ID = -1,
                IdAff = cl.First().IdAff,
                Name = cl.First().Name,
                NameOri = cl.First().Name,
                Nom_aff = cl.First().Nom_aff,
                Profil = cl.First().Profil,
                Longueur = cl.First().Longueur,
                Hauteur = cl.First().Hauteur,
                Largeur = cl.First().Largeur,
                Poids = cl.First().Poids,
                Priorite = cl.Min(c => c.Priorite),
                Matiere = cl.First().Matiere,
                Angle1 = cl.First().Angle1,
                Angle2 = cl.First().Angle2,
                AngleAile1 = cl.First().AngleAile1,
                AngleAile2 = cl.First().AngleAile2,
                GroupeProfil = cl.First().GroupeProfil,
                ListOperations = (cl.SelectMany(g=>g.ListOperations).GroupBy(o=>o.ID)
                    .Select(go => new Operation
                        {
                            ID = go.First().ID,
                            QtyFinished = go.Sum(o => o.QtyFinished),
                            Color=go.First().Color,
                        })).ToList()
                ...
            }).ToList();
    }
}

При использовании вышеуказанного метода расширения вы можете вызвать метод, например

List<Repere> liste_rep_group = liste_rep.GroupByName();

Вы также можете реализовать это как статический класс Utility.В этом случае вы удалите this из раздела параметров метода и вызовете метод, подобный

List<Repere> liste_rep_group = ListRepereExtensionMethods.GroupByName(liste_rep);

Некоторые обсуждения плюсов и минусов подхода доступны по адресу Методы расширения по сравнению со статическим классом утилит оценка затрат / выгод от использования методов расширения в C # => 3,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...