2016-03-02 27 views
1

我有這樣的LINQ實體查詢,LINQ enity框架刪除unnesesary子查詢與所有列

List<CustomisedMoel> query   = ( from customer in context.customers.AsNoTracking() 
               join buyer in context.buyers.AsNoTracking() on new { customerID = customer.ID, Status = 1 } 
                  equals new { customerID = buyer.customerID, Status = buyer.Status } 
               join service in context.services.AsNoTracking() on new { serviceID = buyer.ID, Status = 1 } 
                        equals new { serviceID = service.buyerID, Status = service.Status } 
               join servicestatus in context.serviceStatuses.AsNoTracking() on new { StatusID = service.StatusID } 
                        equals new { StatusID = servicestatus.ID }      
               where buyer.ID.Equals(100) 
                select new CustomisedMoel 
                 { 
                  ID = customer.ID, 
                  BuyerName = buyer.Name, 
                  buyerNumber = buyer.Number, 
                  serviceStatus = service.Name, 
                 }).ToList().Dump(); 
上運行linqpad查詢時

,它是選擇從客戶表中的所有列的子查詢,客戶表有50列, 查詢運行速度慢,切換連接不起作用。

我正在跳得到查詢尋找類似下面的一個:

select customer.ID as ID, buyer.Name as BuyerName,buyer.Number as buyerNumber,service.Name as serviceStatus 
    from customers 
    inner join buyers on buyers.CustomberID and Status = 1 
    inner join services on services.buyerID = buyers.ID and Status = 1 
    innner join serviceStatuses on serviceStatuses.ID = services.StatusID 
    where buyer.ID = 100 

回答

0

在Linqpad試試這個:

List<CustomisedMoel> query   = ( from customer in context.customers 
              join buyer in context.buyers on customer.ID equals buyer.customerID 
              join service in context.services on buyer.ID equals service.buyerID 
              join servicestatus in context.serviceStatuses on service.StatusID equals servicestatus.ID 
              where buyer.Status == 1 && service.Status ==1 && buyer.ID == 100 
               select new 
                { 
                 ID = customer.ID, 
                 BuyerName = buyer.Name, 
                 buyerNumber = buyer.Number, 
                 serviceStatus = service.Name, 
                }).ToList().Dump(); 
+0

已經嘗試過,我得到相同的輸出 –