Linq查询选择顶级记录

Gov*_*iya 8 c# linq

我有IEnumerable<MyData>哪些包含以下数据

Fruits | Name | Quantity | 
__________________________
 Mango | Jay  |    10    |
__________________________
 Apple | Jay  |    16    |
__________________________
 Grapes| Jay  |    12    |
__________________________
 Mango | Raj  |    11    |
__________________________
 Apple | Raj  |    20    |
__________________________
 Grapes| Raj  |    3     |
__________________________
 Mango | Vik  |    20    |
__________________________
 Apple | Vik  |    15    |
__________________________
Run Code Online (Sandbox Code Playgroud)

我需要根据名称从Linq顶部选择两个数量

Jay (10+16+12) = 38
Raj (11+20+3) = 34
Vik (20+15) = 35
Run Code Online (Sandbox Code Playgroud)

Jay和Vik有两个数量之和,所以我需要这些记录

Fruits | Name | Quantity | 
__________________________
 Mango | Jay  |    10    |
__________________________
 Apple | Jay  |    16    |
__________________________
 Grapes| Jay  |    12    |
__________________________
 Mango | Vik  |    20    |
__________________________
 Apple | Vik  |    15    |
__________________________
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 11

听起来像你可能想要的东西:

var query = from item in collection
            group item by item.Name into g
            orderby g.Sum(x => x.Quantity)  descending
            select g;
var topTwo = query.Take(2);
Run Code Online (Sandbox Code Playgroud)

这将采用前两组,因此您将其用作:

foreach (var group in topTwo)
{
    Console.WriteLine("Name: {0}", group.Key);
    foreach (var item in group)
    {
        Console.WriteLine("  {0}: {1}", item.Fruits, item.Quantity);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Ray:是的 - Govind为我修好了; 谢谢两个:) (2认同)
  • @PhilWhittington:LINQ to Objects?不是真的 - 我有一个替代LINQ to Objects实现,它使用"即时"快速排序,使得这种事情比MS实现更有效(*在返回任何东西之前*做*完整排序).在LINQ to SQL等中,它无论如何都取决于数据库. (2认同)