LINQ获取独特的数据并循环以获取相关数据

Dev*_*ter 2 c# linq loops distinct

我是Linq的新手.我想知道这是最好的方式,还是有其他方法可以做到这一点.

我有一个要求,从Web服务,我收到一个项目列表:

class Item {

  string ItemName { get; set;} 
  string GroupName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下数据:

ItemName: Item1; GroupName: A
ItemName: Item2; GroupName: B
ItemName: Item3; GroupName: B
ItemName: Item4; GroupName: A
ItemName: Item5; GroupName: A
Run Code Online (Sandbox Code Playgroud)

现在,我想获取列表中的所有唯一组,并将所有项目关联到该组.所以我上了一堂课:

class Group {
   string GroupName { get; set; }
   List<string> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

因此,只有一个组,所有关联的项目都将在列表下.

我做了两个LINQ语句:

var uniqueGroups = (from g in webservice
        where g.Group != null
        select g.GroupName).Distinct();
Run Code Online (Sandbox Code Playgroud)

然后我循环通过它

foreach (var gn in uniqueGroups)
{
   var itemsAssociated = (from item in webservice 
                          where item.GroupName = gn.ToString()
                          select new {
                               });
}
Run Code Online (Sandbox Code Playgroud)

然后我得到了这些物品,并将它们保存到我的物体中.

这是最好的方法吗?还是有任何LINQ语句可以一次完成所有这些?

谢谢.

Hen*_*nry 5

听起来你想要GroupBy

var itemsByGroup = items.GroupBy(i => i.GroupName);

foreach (var group in itemsByGroup)
{
    var groupName = group.Key;
    var itemsForThisGroup = group;

    foreach (var item in itemsForThisGroup)
    {
        Console.Out.WriteLine(item.ItemName);
    }
}
Run Code Online (Sandbox Code Playgroud)