延迟执行-字典输出
本文关键字:输出 字典 执行 延迟 | 更新日期: 2023-09-27 18:04:48
我有一个Linq查询,它返回大约50万行。然而,由于我没有调用ToList(),执行仍然被延迟。到目前为止一切顺利。
我需要这个查询的Dictionary<int, List<DateTime>>
输出,它将在字典中返回大约100,000个条目(不同的整数列值)。
我试过这样做…
var myDictionary = new Dictionary<int, List<DateTime>>();
var myDictionaryOutput = MyQuery.Select(p => AddOrUpdateDictionary(myDictionary, p));
其中MyQuery是我的linq查询,AddOrUpdateDictionary是我编写的自定义函数。
这将每个条目投射到Dictionary中,这不是我想要的。
我只想要字典的输出。
示例数据如下…
1234 | 2015-08-24 | 2015-08-25 | null |
1234 | null | 2015-08-26 | null |
2345 | null | null | 2015-08-23 |
我希望输出是一个包含两个键的Dictionary
(2个键从3行<=> 100,000个键从500,000行),
1234 -> List<DateTime>{2015-08-24, 2015-08-25, 2015-08-26}
and
2345 -> List<DateTime>{2015-08-23}
我的想法是评估MyQuery.ToList()并将其传递给我的自定义函数将不是很有效,因为我必须使用ForEach循环50万行。
是我错了,还是有更好的方法来实现我所追求的?
看起来您想要做的是通过过滤null
s进行分组,然后随后转换为字典:
var dict = MyQuery
.Select(row => new {row.Id, Dates = new[] {row.Date1, row.Date2, row.Date3}})
.SelectMany(row => row.Dates.Select(d => new {row.Id, Date=d}))
.GroupBy(row => row.Id)
.ToDictionary(g => g.Key, g => g.Select(r => r.Date).ToList());