我正在试图了解Linq chain或lambda chain如何工作,但我无法理解。我在下面写了一个示例代码。我可以用这么长的方式运行代码,但我想学习另一种方式。我使用AWS SDK代码。我正在尝试使用lambda链来完成管理完全相同的单行代码。我想从lambda Chain得到一个“_dict”变量。我必须为“reservedList”变量使用多个“GroupBy”和Select命令,但我该怎么做?
Dictionary<string, Dictionary<string, int>> _dict = new Dictionary<string, Dictionary<string, int>>();
//Dict<AvailabilityZone, Dict<InstanceType, Count>>
var reservedList = _ec2Client.DescribeReservedInstances(new DescribeReservedInstancesRequest { }).ReservedInstances
.GroupBy(q => q.AvailabilityZone);
foreach (var _availabilityZoneItems in reservedList)
{
if (!_dict.ContainsKey(_availabilityZoneItems.Key))
_dict.Add(_availabilityZoneItems.Key, new Dictionary<string, int>());
var typeGroup = _availabilityZoneItems.GroupBy(q => q.InstanceType);
foreach (var _type in typeGroup)
{
var selectionCount = _type.Where(q => q.State == ReservedInstanceState.Active).Sum(q=>q.InstanceCount);
_dict[_availabilityZoneItems.Key].Add(_type.Key, selectionCount);
}
}
尝试做类似
的事情var reservedList = var reservedList = _ec2Client.DescribeReservedInstances(new DescribeReservedInstancesRequest { }).ReservedInstances
.GroupBy(q => q.AvailabilityZone)...
.GroupBy(q => q.InstanceType)
....Select...Where..Count...
答案 0 :(得分:1)
您可能正在寻找PortAudioManager manager = PortAudioManager.createObject();
manager.openStream();
这会使列表中的列表变平..
类似于:(未经测试/未完成)
Enumerable.SelectMany()
也许这会指向正确的方向。我通常会将Linq用于此..
答案 1 :(得分:0)
我会沿着这些方向尝试一些事情
_ec2Client.DescribeReservedInstances(new DescribeReservedInstancesRequest()).ReservedInstances
.GroupBy(q => q.AvailabilityZone)
.ToList()
.ForEach (_availabilityZoneItems => {
_availabilityZoneItems.GroupBy(q => q.InstanceType)
.ToList()
.ForEach(_type => {
_dict[_availabilityZoneItems.Key][_type.Key] = _type.Where(q => q.State == ReservedInstanceState.Active).Count();
});
});
这是未经测试的