如何缓存一个IQueryable对象?(How do I cache an IQueryable o

2019-06-23 12:13发布

我有这个方法返回一个LINQ到SQL查询在“UserStatus”表中的所有行:

public IQueryable<BLL.Entity.UserStatus> GetAll()
{
    var query = from e in _SelectDataContext.UserStatus
                select new BLL.Entity.UserStatus
                {
                    UserStatusId = e.UserStatusId,
                    Enum = e.Enum,
                    Name = e.Name
                };

    return query;
}

这只是将几乎没有改变,所以我想缓存结果的查询表。 我可以将其转换为一个List<>和缓存,但我更喜欢作为类中的其他方法取决于返回一个IQueryable对象。 任何人都可以帮忙吗? 谢谢。

Answer 1:

可以query.ToList().AsQueryable()是你的解决方案? 不是最好的肯定。



Answer 2:

你不能真正做到这一点 - Querable超过数据的指针。 如果你是缓存,您正在缓存的数据,所以你需要有加载的数据。 Yapiskan看法是正确的 - 缓存产生ToList(),并把它带回AsQueryable已()。

请注意,缓存列表将不会有一个DataContext所以您的查询选项将被限制在列表中加载的数据。



Answer 3:

我会问你实际上是想缓存什么? 查询或结果?

如果其结果则上述有意义的建议,但如果你是想缓存供以后使用的查询,则可能我建议使用CompiledQuery,然后储存在某个地方......

以下是有关的文章CompiledQuery以及如何使用它。

同样这一切都取决于你是否希望查询已执行或不...



Answer 4:

看看企业库缓存应用程序块 。 这是一个非常好的通用的缓存架构。



文章来源: How do I cache an IQueryable object?