使用group-by和where子句创建字典

时间:2016-08-22 09:52:19

标签: c# linq group-by

我们有一段代码可以从api调用返回的响应中检索错误列表。到目前为止,在此调用中,返回的对象始终具有唯一的“itemIds”列表。因此,我们将所需内容提取到字典中,如下所示

var errorsReturned = accountReports
                    .SelectMany( o => o.OfferLogList)
                    .Where(o -> !successfulOffers.Contains(o.ItemId))
                    .ToDictionary(o => o.ItemId, o => o.PropertyList);

“successfulOffers”是一个成功的itemIds列表,所以我们想忽略这些。这给了一个字典,其中键是id(字符串),值是“属性列表”,它是属性日志数组。 (我们稍后会用它来提取其他信息。)

我们现在处于可以获得多次返回ItemId的对象的位置。这将使用上面的代码抛出“已添加相同的密钥”异常,因此我想通过ItemId对商品日志列表进行分组,然后将属性日志数组展平。我已经提出了下面的代码,但我对linq不太熟悉,尤其是使用group by

var errorsReturned = accountReports
                    .SelectMany(o => o.OfferLogList)
                    .Where(s => !successfulOffers.Contains(s.ItemId))
                    .GroupBy(o => o.ItemId)
                    .ToDictionary(o => o.Key, o => o.Select(p => p.PropertyList).SelectMany(p => p).ToArray());

所以我的问题是,是否有人能够看到更有效的方法呢?我已经对旧电话进行了测试,据我所知他们都返回相同的结果......但是因为我对linq不是很有经验我会问是否有人可以看到这里有什么不对......这是难以在我们较低的环境中进行测试,因此它会以比我想要的少一点的测试点击我们的生产系统,因此要小心!

提前致谢。

0 个答案:

没有答案