我有这个方法返回'UserStatus'表中所有行的Linq-to-SQL查询:
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对象,因为类中的其他方法依赖于此。有人可以帮忙吗?感谢。
答案 0 :(得分:7)
可以query.ToList().AsQueryable()
成为您的解决方案吗?不是最好的确定。
答案 1 :(得分:3)
你无法真正做到这一点 - Querable更像是一个指针而不是数据。如果您正在缓存,则表示您正在缓存数据,因此您需要加载数据。 Yapiskan有正确的想法 - 缓存生成的ToList()并将其带回AsQueryable()。
请注意,缓存列表中没有DataContext,因此您的查询选项将仅限于列表中加载的数据。
答案 2 :(得分:2)
我不得不问你实际想要缓存什么?查询或结果?
如果结果然后上面的建议有意义,但如果你想缓存查询以供以后使用,那么我可以建议使用CompiledQuery然后将其存储在某处......
以下是关于CompiledQuery以及如何使用它的文章。
这一切都取决于你是否想要执行查询......
答案 3 :(得分:0)
查看企业库caching application block。这是一个非常好的通用缓存架构。