从我的 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】:GetTimezone
和 GetDetailedData
函数将为 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 错误地删除了我的联合中的字段?