C# 延迟执行-字典输出

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

我有一个Linq查询,它返回大约50万行。但是,由于我没有调用ToList(),因此执行仍然延迟。到目前为止还不错

我需要一个
字典
从这个查询中输出,它将在字典中返回大约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());