代码之家  ›  专栏  ›  技术社区  ›  Curtis White

是否将Linq缓存到SQL结果?

  •  0
  • Curtis White  · 技术社区  · 14 年前

    大多数人建议将缓存作为一个列表。我知道这是一个解决方案,可能是我所选择的解决方案。但是,如果您希望能够使用完整的iQuery(IEnumerable)处理缓存的Linq to SQL,该怎么办?功能?

    如果确实尝试缓存原始结果,则会出现错误“不能多次枚举查询结果”。

    因此,要明确我的问题是:

    1. 列表、iQuery和IEnumerable的哈希代码是否唯一?
    2. 如果我想安全地缓存linq-to-sql结果,并在之后提供最大的功能,我该怎么做呢?
    3 回复  |  直到 14 年前
        1
  •  1
  •   Dave Swersky    14 年前

    一旦缓存了IEnumerable,它就是一个“水合物”列表,它本身仍然是可查询的。这个 AsQueryable() 方法可用于查询填充到列表中的记录的子集:

    IEnumerable foo = from o in ctx.MyObjects
                      select o;
    
    foo.ToList();
    
    IEnumerable bar = from f in foo.AsQueryable()
                      select f;
    

    以下是有关使用asqueryable()的更多有用信息: http://weblogs.asp.net/zeeshanhirani/archive/2008/07/31/using-asqueryable-with-linq-to-objects-and-linq-to-sql.aspx

        2
  •  1
  •   Mark Byers    14 年前

    但是,如果您希望能够使用完整的iQuery(IEnumerable)处理缓存的Linq to SQL,该怎么办?功能?

    班级 List<T> 器具 IEnumerable<T> 如果您愿意的话,您可以使用LINQ查询它。

    大多数人建议将缓存作为一个列表。

    我想说,这取决于您计划如何处理缓存数据。一 列表& T; 在很多情况下都可以。如果希望基于唯一键进行快速查找,最好将缓存数据存储在 Dictionary<TKey, TValue> 相反。

        3
  •  0
  •   James Curran    14 年前

    你到底在缓存什么?IQueryable不是结果(查询是问题,不是答案)。

    此外,IEnumerable不是一回事,它只是一种描述。必须有一些基础的真实数据结构(如列表或数组)