-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),
有没有办法,我可以防止这个问题的任何有效的方式?
你使用的是实体框架吗?尝试创建存储过程并在EF中调用它。 – malkam
@malkam是的我正在使用实体框架。感谢您的建议 – chamara