从LINQ到SQL调用UDF和proc的效率如何?

问题描述

| 我遇到一个问题,需要在LINQ to sql调用UDF,然后在其中调用一个存储过程。这是代码
    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,则可以避免一切。可悲的是,我对此无能为力。     

解决方法

为什么spXI_GetData无法返回完整的结果集?我想说这在这种情况下是最佳的。     ,
spXI_GetData
集中的每一行将调用
GetTimezone
GetDetailedData
函数。如果
GetTimezone
函数可以返回一个内联表并且比您可以加入它更好。