在Linq2SQL中缓存聚合结果

时间:2009-10-06 07:35:10

标签: c# sql-server linq-to-sql tsql

我们有一个小型联盟计划和一个简单的工具来查看联盟会员统计信息。

Linq用于显示报告:

from e in linq0
select new
{
    Id = e.Id,
    Name = e.CompanyName,
    EnquiryCount = (int?)e.CampaignCodes.Sum(f => f.Enquiries.Count()) ?? 0,
    EnquiryOrderSum = (int?)e.CampaignCodes.Sum(f => (int?)f.Enquiries.Sum(g => (int?)g.Orders.Sum(h => h.OrderPrice) ?? 0) ?? 0) ?? 0
    ...
}

随着数据库的增长,EnquiryCount和EnquiryOrderSum的计算时间越来越长。 (索引是定义的,我保证)。

一个想法是将EnquiryCount和EnquiryOrderSum缓存到一个sepparate表,并在每晚的每个小时重新计算这些。

有没有办法(在linq2sql / asp.net中)一般地缓存这些结果而不为每个属性创建静态表/列?

我正在考虑创建类似的东西:

EnquiryCount = Cache(g => (int?)e.CampaignCodes.Sum(f => f.Enquiries.Count()) ?? 0, 3600000 /*ms lifetime*/, e.Id/*key*/, "AffiliateService.EnquiryCount"/*property*/)

每次调用时都会查找缓存值。但我怀疑这会非常有效吗?

1 个答案:

答案 0 :(得分:1)