问题描述
|
我遇到一个问题,需要在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
函数可以返回一个内联表并且比您可以加入它更好。