Performance 如何优化慢速LINQ查询?
我试图删除一条使用contain()和skip()take()的语句 但执行起来还需要很长时间Performance 如何优化慢速LINQ查询?,performance,entity-framework,linq,Performance,Entity Framework,Linq,我试图删除一条使用contain()和skip()take()的语句 但执行起来还需要很长时间 public JsonNetResult GetList(C.Lib.ListParam param, string type, DateTime? WorkDate, string MNo, string ANo, string AName, string Specifi, string PNo, string SName, string PType, string OrNo) {
public JsonNetResult GetList(C.Lib.ListParam param, string type, DateTime? WorkDate, string MNo, string ANo, string AName, string Specifi, string PNo, string SName, string PType, string OrNo)
{
var idObj = (mis.Models.Security.CIdentity)Csla.ApplicationContext.User.Identity;
var c = new mis.Models.CEntities();
var targetList = (from obj in c.WorkOrders
join obj2 in c.Partners on obj.PartnerId equals obj2.PartnerId
join obj3 in c.Assets on obj.AssetsId equals obj3.AssetsId
join obj4 in c.WorkOrderItems on obj.WorkOrderId equals obj4.WorkOrderId
join obj5 in c.WorkItems on obj4.WorkId equals obj5.WorkId
join obj6 in c.Products on obj3.AssetsId equals obj6.AssetsId
where true && obj.TenantId == idObj.TenantId && obj2.Customer == true && obj.WorkOrderStatus <= 1
select new
{
WorkProgressId = obj.WorkOrderId,
OrderNo = obj.InOrderItem.OrderItem.Order.OrderNo,
ProductType = obj5.ProductType,
WorkOrderId = obj.WorkOrderId,
MakeQty = obj.MakeQty,//delete some column
PrepaidDate = obj.PrepaidDate,
CompleteDate = (from subobj in c.WorkOrderItems
where subobj.WorkOrderId == obj.WorkOrderId && subobj.CompleteDate != null
orderby subobj.CompleteDate descending, subobj.WorkItem.WorkNo descending
select subobj.CompleteDate).FirstOrDefault(),
WorkNoName = (from subobj in c.WorkOrderItems
where subobj.WorkOrderId == obj.WorkOrderId && subobj.CompleteDate != null
orderby subobj.WorkItem.WorkNo descending
select new { WorkNoName = subobj.WorkItem.WorkNo + " " + subobj.WorkItem.WorkName }).FirstOrDefault().WorkNoName,
});
targetList = targetList.GroupBy(x => x.MakeNo).Select(x => new
{
WorkProgressId = x.FirstOrDefault().WorkOrderId,
OrderNo = x.FirstOrDefault().OrderNo,
ProductType = x.FirstOrDefault().ProductType,
WorkOrderId = x.FirstOrDefault().WorkOrderId,
WorkOrderDate = x.FirstOrDefault().WorkOrderDate,
OrderQty = x.FirstOrDefault().OrderQty,
MakeQty = x.FirstOrDefault().MakeQty,
PrepaidDate = x.FirstOrDefault().PrepaidDate,//delete some column
CompleteDate = x.FirstOrDefault().CompleteDate,
WorkNoName = x.FirstOrDefault().WorkNoName
}).OrderByDescending(x => x.WorkOrderDate).ThenByDescending(x => x.WorkNoName);
param.SetCount(targetList);
targetList.OrderByDescending(x => x.WorkOrderDate).ThenByDescending(x=> x.WorkNoName);
var tk= targetList.Skip((param.Page - 1) * param.Rows).Take(param.Rows);
return JsonNetHelper.ReturnData(param,tk);
}
public JsonNetResult GetList(C.Lib.ListParam参数,字符串类型,DateTime?WorkDate,字符串MNo,字符串ANo,字符串AName,字符串specifii,字符串PNo,字符串SName,字符串PType,字符串OrNo)
{
var idObj=(mis.Models.Security.cidenty)Csla.ApplicationContext.User.Identity;
var c=新的mis.Models.CEntities();
var targetList=(来自c.WorkOrders中的obj
将obj2加入到c.Partners上的obj.PartnerId等于obj2.PartnerId
将obj3连接到c中。obj.AssetsId上的资产等于obj3.AssetsId
在obj上的c.WorkOrderItems中加入obj4。WorkOrderId等于obj4.WorkOrderId
将obj5连接到obj4.WorkId上的c.WorkItems中等于obj5.WorkId
在c中加入obj6。obj3.AssetId上的产品等于obj6.AssetId
其中true&&obj.TenantId==idObj.TenantId&&obj2.Customer==true&&obj.WorkOrderStatus x.MakeNo)。选择(x=>new
{
WorkProgressId=x.FirstOrDefault().WorkOrderId,
OrderNo=x.FirstOrDefault().OrderNo,
ProductType=x.FirstOrDefault().ProductType,
WorkOrderId=x.FirstOrDefault().WorkOrderId,
WorkOrderDate=x.FirstOrDefault().WorkOrderDate,
OrderQty=x.FirstOrDefault().OrderQty,
MakeQty=x.FirstOrDefault().MakeQty,
PrepaidDate=x.FirstOrDefault().PrepaidDate,//删除一些列
CompleteDate=x.FirstOrDefault().CompleteDate,
WorkNoName=x.FirstOrDefault().WorkNoName
}).OrderByDescending(x=>x.WorkOrderDate),然后ByDescending(x=>x.WorkNoName);
参数设置计数(目标列表);
OrderByDescending(x=>x.WorkOrderDate),然后ByDescending(x=>x.WorkNoName);
var tk=targetList.Skip((param.Page-1)*param.Rows.Take(param.Rows);
返回JsonNetHelper.ReturnData(参数,tk);
}
我想知道优化它的最佳方法是什么?或者查询分析器会为我这样做吗?您是否查看了它生成的SQL查询?[链接](以下是操作方法:)。您可以尝试在SQL Server Management Studio中运行它,查看执行计划,并查看它是否提供了有关创建索引或其他优化的建议。我认为您应该取消表的规格,以排除某些联接和子查询。您是否查看了它生成的SQL查询?[链接](以下是操作方法:)。您可以尝试在SQL Server Management Studio中运行它,查看执行计划,并查看它是否提供了有关创建索引或其他优化的建议。我认为您应该取消表的规范化,以排除某些联接和子查询。