从我的 LINQ to SQL 中调用 UDF 和 sproc 的效率如何?

Posted

技术标签:

【中文标题】从我的 LINQ to SQL 中调用 UDF 和 sproc 的效率如何?【英文标题】:How efficient is it to call a UDF and sproc from within my LINQ to SQL? 【发布时间】:2011-04-14 22:09:55 【问题描述】:

我遇到了一个问题,我需要在我的 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,这一切都可以避免。可悲的是,我无法控制。

【问题讨论】:

【参考方案1】:

为什么 spXI_GetData 不能返回完整的结果集?我会说这在这种情况下是最佳选择。

【讨论】:

【参考方案2】:

GetTimezoneGetDetailedData 函数将为 spXI_GetData 集合中的每一行调用。如果GetTimezone 函数可以返回一个内联表并且您可以加入它,那会更好。

【讨论】:

以上是关于从我的 LINQ to SQL 中调用 UDF 和 sproc 的效率如何?的主要内容,如果未能解决你的问题,请参考以下文章

LINQ to SQL 调用 SQL Server 的系统函数

在没有“dbo”数据库用户的情况下在 LINQ 中调用 UDF

LINQ to SQL class LINQ to sql Objects?

为啥 Linq-to-sql 错误地删除了我的联合中的字段?

使用 LINQ to SQL 时如何处理 SqlException“未找到记录”?

Linq to SQL 还是 Linq to DataSet?