2014-05-09 85 views
-2

我试图从数据库中检索一些记录以及LINQ的计数。LINQ查询获得记录数

DataTable dtByRecipe = (from tbrp in context.tblRecipeParents 
    join tbrc in context.tblRecipeChilds on tbrp.RecipeParentID equals tbrc.RecipeParentID 
    join tbp in context.tblProducts on tbrc.ProductID equals tbp.ProductID 
    join tbps in context.tblProductSales.AsEnumerable() 
    on tbp.ProductID equals tbps.ProductID 
    join tbs in context.tblSales.AsEnumerable() 
    on tbps.ProductSalesID equals tbs.ProductSalesID select new 
    { 
     tbrp.Recipe, 
     tbp.ProductID, 
     tbps.ProductSalesID, 
     tbrp.Yield, 
     Product = tbp.ProductCode + " - " + tbp.ProductDescription, 
     ProductYield = tbrp.Yield, 
     TotalYield = "XXX", 
     Cost = "YYY" 
    }).AsEnumerable() 
    .Select(item => new { 
     item.Recipe, 
     Count = GetCount(item.ProductID, item.ProductSalesID, context), 
     item.Yield, 
     Product = item.Product, 
     ProductYield = item.ProductYield, 
     TotalYield = "XXX", 
     Cost = "YYY" 
    }).OrderBy(o => o.Recipe).ToDataTable(); 


private int GetCount (int ProductID, int ProductSalesID, MTBARKER_DBEntities context) 
{ 
    int query = (from tbps in context.tblProductSales 
     join tbp in context.tblProducts on tbps.ProductID equals tbp.ProductID 
     join tbs in context.tblSales 
     on tbps.ProductSalesID equals tbs.ProductSalesID 
     where tbp.ProductID == ProductID && tbps.ProductSalesID == ProductSalesID 
     select tbs).Count(); 

    return query; 
} 

在上面的查询中我得到预期的结果,但是因为有10K左右的记录在数据库中消耗了大量的时间来产生结果。问题出在以下我用来计算的方法。

Count = GetCount(item.ProductID, item.ProductSalesID, context), 

有没有办法,我可以防止这个问题的任何有效的方式?

+1

你使用的是实体框架吗?尝试创建存储过程并在EF中调用它。 – malkam

+0

@malkam是的我正在使用实体框架。感谢您的建议 – chamara

回答

2

Well Stored Procedures是性能的最佳选择。在实体框架中使用存储过程进行选择和报告。