Насколько эффективно вызывать UDF и sproc из моего LINQ to SQL? - PullRequest
0 голосов
/ 15 апреля 2011

Я столкнулся с проблемой, когда мне нужно вызвать 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>();
    }

Строка, о которой я беспокоюсь, - это та, где я вызываю UTF GetTimezone. Неэффективно ли вызывать UDF в середине запроса LINQ, а затем другую хранимую процедуру (GetDetailedData), чтобы получить единственное значение для этого UDF? Какой тип SQL это будет генерировать?

Это выглядит немного запутанным для меня, но все же лучше, чем альтернатива, которая будет являться дополнительным выбором или присоединением к моей хранимой процедуре. (Я пытаюсь избежать того, чтобы моя хранимая процедура возвращала новое поле - TimeZone - вместо этого просто возвращая его в моем DTO.) И да, я понимаю, что этого можно было бы избежать, если бы мы использовали UTC. К сожалению, я не могу это контролировать.

Ответы [ 2 ]

1 голос
/ 26 апреля 2011

Функции GetTimezone и GetDetailedData будут вызываться для каждой строки в наборе spXI_GetData.Было бы лучше, если бы функция GetTimezone могла возвращать встроенную таблицу, и вместо этого вы могли бы присоединиться к ней.

1 голос
/ 26 апреля 2011

Почему spXI_GetData не может вернуть полный набор результатов?Я бы сказал, что это было бы оптимально в этой ситуации.

...