Я столкнулся с проблемой, когда мне нужно вызвать UDF в моем LINQ to SQL, а затем другую хранимую процедуру внутри него. Вот код.
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, а затем другую хранимую процедуру (GetDetailedData), чтобы получить одно значение для этой UDF? Какой тип SQL это сгенерирует?
Это выглядит немного запутанным для меня, но все же лучше, чем альтернатива, которая была бы подвыборкой или соединением в моей хранимой процедуре. (Я пытаюсь избежать того, чтобы моя хранимая процедура возвращала новое поле — TimeZone — вместо этого просто возвращала его в мой DTO.) И да, я понимаю, что всего этого можно было бы избежать, если бы мы использовали UTC. К сожалению, я не могу это контролировать.