4

我有这个方法可以为“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;
}

这只是一个几乎不会改变的查找表,所以我想缓存结果。我可以将它转换为 aList<>并缓存它,但我更愿意返回一个 IQueryable 对象,因为类中的其他方法依赖于它。任何人都可以帮忙吗?谢谢。

4

4 回答 4

7

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

于 2009-06-17T17:16:00.477 回答
4

你不能真正做到这一点—— Querable 更像是一个指针而不是数据。如果您正在缓存,那么您正在缓存数据,因此您需要加载数据。Yapiskan 有正确的想法——缓存生成的 ToList() 并将其带回 AsQueryable()。

请注意,缓存列表没有 DataContext,因此您的查询选项将仅限于加载到列表中的数据。

于 2009-06-17T17:23:42.417 回答
2

我不得不问你真正想要缓存什么?查询还是结果?

如果它的结果​​那么上面的建议是有意义的,但如果你想缓存查询以供以后使用,那么我可以建议使用 CompiledQuery 然后将它存储在某个地方......

这是一篇关于CompiledQuery以及如何使用它的文章。

同样,这一切都取决于您是否希望查询已被执行......

于 2009-06-17T17:27:21.787 回答
0

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

于 2009-06-17T17:12:35.253 回答