c# - 延迟执行 - 字典输出

标签 c# linq entity-framework linq-to-sql linq-to-entities

我有一个返回大约一百万行的 Linq 查询。但是,由于我没有调用 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 是我编写的自定义函数。

这将每个条目转换到字典中,这不是我想要的。

我只想要字典输出。

示例数据如下所示......

1234 | 2015-08-24 | 2015-08-25 | null       |
1234 | null       | 2015-08-26 | null       |
2345 | null       | null       | 2015-08-23 |

我希望输出是一个有两个键的字典

(3 行中的 2 个键 <=> 500,000 行中的 100,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 进行分组,然后转换为字典:

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());

关于c# - 延迟执行 - 字典输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31637750/

相关文章:

c# - RSA - 仅使用(!)模数加密?

c# - 在 Excel 工作表顶部添加额外的标题行 [EPPlus]

c# - 如何访问我的 LINQ 模型中的特定行?

c# - 检查 linq 新对象中的空字段

c# - LINQ-to-SQL 编译查询问题(用作未编译查询)

entity-framework - Entity Framework : Use stored procedure to return raw table result

c# - 如何使用导航属性和非标准键?

c# - 关键字 'Transaction' 附近的语法不正确

c# - 您必须添加对程序集 mscorlib 的引用,version=4.0.0

c# - 如何使 EF 使用字符串连接构建更新 SQL?