如何使用LINQ OrderBy先按组然后按子组返回重复项?

时间:2019-04-05 22:34:26

标签: c# linq

我很难理解如何按一个键,然后按另一个键分组。我提供了一个简单的示例,说明了我正在做的分配工作,以期了解LINQ查询。

例如,假设我正在读取包含宠物信息的.CSV文件。我创建了一个Pets类和一个内存数组。

我曾尝试研究类似的示例,但是找不到一个清晰的示例:1.创建两个组2.使其中一个组处理重复项

class Pets {
      public string name;
      public string breed;
      public string age;
      public string shop;
}

Pets [] pets = new Pets[] {
new Pets {
    name= columns[0],
    breed = columns[1],
    age =  Convert.ToInt32(columns[2]),
    shop = columns[3],
}
};

我试图按“品种优先”分组,然后按商店分组。我对代码进行了注释,以试图解释我的思考过程。

var puppygroups = 
from p in pets
group p by p.breed into group1    // put all the breeds into one group

select new
{
    pups = g1.Key,   // breed key

Subgroups = 
    from pups in group1
    where group1.Count() > 1 // where breed count is more than 1
    group pups by pups.shop into group2 // put all the shops in group 2
    select group2
};

foreach (var p in puppygroups)
{
    Console.WriteLine(“Name {0}, Breed {1}, Shop{2}” p.name, p.breed, p.shop);
}

说我想将品种用作第一级密钥,将商店用作第二级密钥。我想在第二层(商店名称)中打印至少有2只宠物的组;

我想返回类似的内容:

漫游者,贵宾犬,PuppyPals

公主,贵宾犬,PuppyPals

如果我试图在程序中多次创建这些组,但仍未达到预期的效果,我将不胜感激。

0 个答案:

没有答案