2013-08-01 13 views
2

訂購列表我上課是這樣的:通過suming幾行

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

我怎樣才能實現LINQ語句來對myList中執行此排序給我myArray的?

非常感謝任何可以幫助的人。

回答

6
UserDataPoint[] myArray = 
    myList.GroupBy(udp => udp.User) 
      .OrderByDescending(g => g.Sum(udp => udp.Spend)) 
      .SelectMany(g => g) 
      .ToArray(); 
+0

您應該使用OrderByDescending。如果使用OrderBy,則用戶'John'是數組中的第一個元素。 – ProgramFOX

+0

@ProgramFOX,很好的接收,謝謝。更新。 – Andrei

+0

謝謝你們,效果很好。 – ColinCG