如何将IEnumerable<IList<Telemetry>>转换为按Id分组的IDictionary<string, IEnumerable<IList<Telemetry>>>?
实现方案
你可以直接通过LINQ实现目标转换,根据你的业务场景不同,有两种可选写法:
通用场景(单个IList可包含多个不同Id的元素)
该方案会把包含对应Id的IList<Telemetry>实例全部分配到对应Id的分组下,即使一个列表同时包含多个不同Id的元素也能正常处理:
// telemetryCollection为你的TelemetryCollection实例 IDictionary<string, IEnumerable<IList<Telemetry>>> result = telemetryCollection .SelectMany(list => list .Select(t => t.Id) .Distinct() .Select(id => new { Id = id, RelatedList = list })) .GroupBy(pair => pair.Id, pair => pair.RelatedList) .ToDictionary(group => group.Key, group => group.AsEnumerable());
简化场景(单个IList内所有元素Id完全一致)
如果你的业务逻辑保证每个IList<Telemetry>内部的所有Telemetry实例的Id属性完全相同,可以用更简洁的写法:
// 建议先过滤空列表避免First()抛出异常 IDictionary<string, IEnumerable<IList<Telemetry>>> result = telemetryCollection .Where(list => list.Any()) .GroupBy(list => list.First().Id) .ToDictionary(group => group.Key, group => group.AsEnumerable());
内容的提问来源于stack exchange,提问作者Manikanta
相关产品推荐
相关产品推荐

