2 votes

Ordonner une liste en additionnant plusieurs lignes

J'ai des cours comme ça :

public class UserDataPoint
{
    public string User { get; set; }
    public string Category { get; set; }
    public int Spend { get; set; }

    public UserDataPoint(string strUser, string strCategory, int intSpend)
    {
        User = strUser;
        Category = strCategory;
        Spend = intSpend;
    }
}

qui est rempli avec des données comme celles-ci :

var myList = new List<UserDataPoint>() { 
    new UserDataPoint("Bob", "Local", 34),
    new UserDataPoint("Bob", "National", 16),
    new UserDataPoint("Bob", "Mobile", 7),
    new UserDataPoint("John", "Local", 18),
    new UserDataPoint("Fred", "National", 22),
    new UserDataPoint("Fred", "International", 65) };

Je voudrais remplir un tableau :

UserDataPoint[] myArray;

Avec les données de myList, mais classées par 'Utilisateur' avec la valeur la plus élevée. total "Dépenser". Ainsi, à partir des données de l'exemple ci-dessus, Fred serait le premier de la liste (22 + 65 = 87), suivi de Bob (34 + 16 + 7 = 57) et enfin de John (18).

Ainsi, mon tableau résultant serait rempli dans cet ordre :

UserDataPoint[] myArray = new UserDataPoint[] { 
    new UserDataPoint("Fred", "National", 22),
    new UserDataPoint("Fred", "International", 65),
    new UserDataPoint("Bob", "Local", 34),
    new UserDataPoint("Bob", "National", 16),
    new UserDataPoint("Bob", "Mobile", 7),        
    new UserDataPoint("John", "Local", 18) };

Comment puis-je mettre en œuvre une instruction LINQ pour effectuer ce classement sur myList et obtenir myArray ?

Merci à tous ceux qui peuvent nous aider.

6voto

Andrei Points 25595
UserDataPoint[] myArray =
    myList.GroupBy(udp => udp.User)
            .OrderByDescending(g => g.Sum(udp => udp.Spend))
            .SelectMany(g => g)
            .ToArray();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X