关于LINQ和LAMBDA链的使用

时间:2015-10-21 13:21:43

标签: c# .net linq lambda

我正在试图了解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...

2 个答案:

答案 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();
                                     });
           });

这是未经测试的