您正在寻找GroupBy。你需要GroupBy你的钥匙然后Select你的结果。这是使用您的数据的示例--
public class Program
{
public static void Main(string[] args)
{
var list = new List<Item>
{
new Item { task = 1, supplier = 77, source = 3 },
new Item { task = 2, supplier = 71, source = 3 },
new Item { task = 3, supplier = 77, source = 1 },
new Item { task = 4, supplier = 77, source = 2 },
new Item { task = 5, supplier = 72, source = 3 },
new Item { task = 6, supplier = 72, source = 2 },
new Item { task = 7, supplier = 77, source = 3 },
new Item { task = 8, supplier = 72, source = 3 },
new Item { task = 9, supplier = 71, source = 1 },
new Item { task = 10, supplier = 72, source = 3 }
};
var groupBy =
list
.GroupBy(x => new { first = x.source, second = x.supplier})
.Select(x => new { name = x.Key, items = x.Count() });
foreach (var g in groupBy)
{
Console.WriteLine(g);
}
}
}
public class Item
{
public int task;
public int supplier;
public int source;
}
打印出来
{ name = { first = 3, second = 77 }, items = 2 }
{ name = { first = 3, second = 71 }, items = 1 }
{ name = { first = 1, second = 77 }, items = 1 }
{ name = { first = 2, second = 77 }, items = 1 }
{ name = { first = 3, second = 72 }, items = 3 }
{ name = { first = 2, second = 72 }, items = 1 }
{ name = { first = 1, second = 71 }, items = 1 }
您可以将此示例作为您的起点。要完成您需要的操作,只需将 .Count() 更改为 .Aggregate(),这样它就会返回任务 ID 的列表,而不是任务 ID 的数量。如果您愿意,您还可以更改键以匹配“组 1”“组 2”,但您需要想出一些标准方法来为每个组编号(例如,"group"+(index+1).ToString())。