0

我遇到了一個問題,我需要在我的LINQ to SQL中調用UDF,然後再調用另一個存儲過程。這是代碼。從LINQ to SQL調用UDF和sproc的效率如何?

public IQueryable<DataDTO> GetLotsaData(string dataId, DateTime date, string custIDs) 
    { 
     var data = (from rs in _context.spXI_GetData(dataId, date, custIDs) 
          select new DataDTO 
          { 
           Time = rs.Time, 
           TimeZone = _context.GetTimezone(postDate, _context.GetDetailedData(rs.PKID, custIDs).FirstOrDefault().Zip), 
           CompletedTime = rs.Completed_Time, 
          }); 

     return data.AsQueryable<DataDTO>(); 
    } 

我擔心的是我打電話給GetTimezone UDF的行。在LINQ查詢中間調用UDF,然後使用另一個存儲過程(GetDetailedData)爲UDF獲取單個值,效率不高嗎?這會產生什麼樣的SQL?

它看起來有點複雜,但仍比我的存儲過程中的子選擇或加入替代方案更好。 (我試圖避免讓我的存儲過程返回新的字段 - TimeZone - 而不是讓它在我的DTO中返回。)是的,我意識到如果我們使用UTC,這一切都可以避免。可悲的是,我無法控制這一點。

回答

1

爲什麼spXI_GetData不能返回完整的結果集?我會說在這種情況下這是最佳的。

1

將調用GetTimezoneGetDetailedData函數將在spXI_GetData集合中的每一行中調用。如果GetTimezone函數可以返回一個內聯表,並且你可以用它加入,那會更好。