我遇到了一個問題,我需要在我的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,這一切都可以避免。可悲的是,我無法控制這一點。