C# 延迟执行-字典输出
我有一个Linq查询,它返回大约50万行。但是,由于我没有调用ToList(),因此执行仍然延迟。到目前为止还不错 我需要一个C# 延迟执行-字典输出,c#,linq,entity-framework,linq-to-sql,linq-to-entities,C#,Linq,Entity Framework,Linq To Sql,Linq To Entities,我有一个Linq查询,它返回大约50万行。但是,由于我没有调用ToList(),因此执行仍然延迟。到目前为止还不错 我需要一个字典从这个查询中输出,它将在字典中返回大约100000个条目(不同的整列值) 我试过这样的东西 var myDictionary = new Dictionary<int, List<DateTime>>(); var myDictionaryOutput = MyQuery.Select(p => AddOrUpdateDictionar
字典
从这个查询中输出,它将在字典中返回大约100000个条目(不同的整列值)
我试过这样的东西
var myDictionary = new Dictionary<int, List<DateTime>>();
var myDictionaryOutput = MyQuery.Select(p => AddOrUpdateDictionary(myDictionary, p));
我希望输出是一个有两个键的字典
(3行2把钥匙500000行100000把钥匙)
1234->List{2015-08-242015-08-252015-08-26}
及
2345->列表{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());
目前还不清楚数据的形状,也不清楚您是如何从结果中的500K行中选择100K条目的……似乎您应该看看
GroupBy
operator谢谢Jon,这是即时回复。我已经用一些额外的信息更新了我的问题。
1234 -> List<DateTime>{2015-08-24, 2015-08-25, 2015-08-26}
and
2345 -> List<DateTime>{2015-08-23}
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());