[英]Optimizing LINQ Query using Entity Framework
我有以下LINQ查询,以使用Entity Framework获取产品信息
productDetails.Items = (from productDetail in db.ToList()
select new prod
{
ID = productDetail.ID
ProdName = productDetail.ProductName,
...
...
...
...
Calaculation1 = GetCalaculation(productDetail.Calc1),
Calaculation1 = GetCalaculation(productDetail.Calc2),
...
...
...
...
Calaculation15 = GetCalaculation(productDetail.Calc3)
}
).ToList();
其中,GetCalaculation方法还使用LINQ查询数据库。 如果获取100条记录,则查询速度很慢。 我如何优化它?
首先,您的选择结构对我来说似乎有点“麻烦”,因为您为每个记录获取了15个Calaculation
属性。 即使您在数据库中创建视图,该视图也将具有15个Joins
to Calculations表,这对性能非常不利。 因此,您应该做的第一件事是查看对象结构并确认您确实需要在一个请求中提取所有这些计算。 如果您坚持不能更改您的结构,请执行以下步骤,这些步骤可以显着提高性能:
不要在查询中使用db.ToList()
-通过这样做,您将所有表都提取到内存中,然后对每个计算都发出单独的查询。
我对此查询有些困惑:
var dbQuery = from calculation in db.Calculations where calculation.calc == calc1 select calculation); var totalsum = (from xyz in dbQuery select (Decimal?)xyz.calc).Sum() ?? 0;
您要获取所有具有calc == calc1
的记录,然后计算其总和? calc == calc1
有多少条记录具有calc == calc1
并乘以calc == calc1
会不会容易calc1
db.Calculations.Count(c=>c.calc == calc1) * calc1;
var calcTable = db.Calculations.ToList()
)一起提取到内存中可能会比较便宜,那么GetCalaculation将与速度更快的内存中对象一起工作。 如果要执行此操作,则可以考虑并行执行或在单独的任务中执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.