Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 如何优化慢速LINQ查询?_Performance_Entity Framework_Linq - Fatal编程技术网

Performance 如何优化慢速LINQ查询?

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) {

我试图删除一条使用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)
    {
        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中运行它,查看执行计划,并查看它是否提供了有关创建索引或其他优化的建议。我认为您应该取消表的规范化,以排除某些联接和子查询。