2

私はこのようなクラスを持っています:

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;
    }
}

次のようなデータが入力されています。

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) };

配列にデータを入力したい:

UserDataPoint[] myArray;

myList からのデータを使用しますが、合計「支出」が最も高い「ユーザー」順に並べ替えます。したがって、上記の例のデータから、Fred がリストの最初 (22 + 65 = 87)、次に Bob (34 + 16 + 7 = 57)、そして最後に John (18) になります。

したがって、結果の配列は次の順序で入力されます。

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) };

myList でこの順序付けを実行して myArray を取得する LINQ ステートメントを実装するにはどうすればよいですか?

助けてくれる人に感謝します。

4

1 に答える 1

6
UserDataPoint[] myArray =
    myList.GroupBy(udp => udp.User)
            .OrderByDescending(g => g.Sum(udp => udp.Spend))
            .SelectMany(g => g)
            .ToArray();
于 2013-08-01T09:27:08.067 に答える