【问题标题】:Sum in Sum C# Linq MVC 5Sum in Sum C# Linq MVC 5
【发布时间】:2016-04-02 16:49:15
【问题描述】:

我已经编写了 som 代码,当我的数据库中有很多记录时,现在速度很慢。有人知道如何优化吗?

我有这个模型:

public class StockBalance
{
    public double stockBalanceValue()
    {
        return stockBalanceProductItems.Where(x => x.productItemStatus == ProductStatus.InStock).Select(p => p.productItemPurchaes.purchaesPrice).Sum();
    }

    public double stockBalanceCount()
    {
        return stockBalanceProductItems.Where(x => x.productItemStatus == ProductStatus.InStock).Count();

    }
}

public class Product
{
    public double productQty()
    {
        return productStockBalance.Select(x => x.stockBalanceCount()).Sum();
    }
}

当我在我的视图中想要这样做时,它可能需要 5 分钟来加载页面,我在 productItems 表中有 4000 条记录。我的表格是:Products、Stocks、StockBalance、ProductItems。

查看:

@Stock.stockStockBalance.Select(x => x.stockBalanceValue()).Sum()
@Stocks.Sum(x => x.stockStockBalance.Sum(m => m.stockBalanceValue()))
@Product.productQty()

【问题讨论】:

  • 为什么要在模型中计算总和?什么是 stockbalanceProductItems?您的视图的模型类型是什么?你控制器做什么?有很多缺失的信息,请添加更多详细信息让我们提供帮助
  • Stocks.Sum(x => x.stockStockBalance.Sum(m => m.stockBalanceValue())) 可以替换为Stocks.SelectMany(x => x.stockStockBalance).Sum(m => m.stockBalanceValue)
  • 并且在productItemStatus上建立索引也会有所帮助

标签: c# linq optimization asp.net-mvc-5 sum


【解决方案1】:

您似乎正在视图模型中进行聚合。也许您可能会考虑将该逻辑移近您的数据访问层;这样您就可以让 SQL(通过实体框架)为您处理数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2022-12-27
    相关资源
    最近更新 更多