【问题标题】:Correct way of using .ToLookup() with an EF Core query将 .ToLookup() 与 EF Core 查询一起使用的正确方法
【发布时间】:2023-01-07 00:02:17
【问题描述】:

我正在尝试将 .ToLookup() 方法与 EF Core 查询一起使用,想知道使用它时的最佳做法是什么,我应该先将查询缓冲到列表中,还是直接在 IQueryable 上调用 .ToLookup()

var lookup = DbContext.Foo.Where(f => f.Id > 1).ToLookup(f => f.Id);

//vs:

var lookup = (await DbContext.Foo.Where(f => f.Id > 1).ToListAsync(cancellation)).ToLookup(f => f.Id);

我主要担心的是 ToListAsync 方法将异步执行查询,而直接 .ToLookup 调用看起来就像它会阻塞,直到返回查询结果。

然而,正如@Tim 提到的那样,ToListAsync 方法最终将在内存中创建 2 个集合。

谢谢

【问题讨论】:

    标签: c# .net entity-framework-core


    【解决方案1】:

    ToLookup创建一个类似于Dictionary<TKey, TValue>的内存集合,所以没有必要创建一个列表然后调用ToLookup,你只会无缘无故地浪费CPU和内存。

    所以它类似于ToDictionary,但不同于GroupBy。后者使用“延迟执行”,这意味着您在使用它时仍处于数据库上下文中,而查找或字典是已经填充的集合。

    【讨论】:

      猜你喜欢
      • 2020-04-11
      • 2023-02-02
      • 1970-01-01
      • 2014-08-30
      • 2011-10-05
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多