У меня есть несколько SQL, которые я хочу скопировать в LINQ to Entities. У него есть таблица со столбцом DateTime и местоположением GPS в то время для другого объекта в системе. Он CROSS СОЕДИНЯЕТ эту таблицу к выводу табличной функции, которая генерирует «расписание» за определенный период. Код для этого TVF выглядит примерно так:
WHILE @dt_start <= @dt_end
BEGIN
INSERT INTO @res (dt) VALUES (@dt_start)
SET @dt_start = dateadd(ms, @interval_ms, @dt_start)
END -- WHILE
так что результат этого перекрестного соединения дает список местоположений GPS для объекта в каждый из сгенерированных моментов времени от dt_start до dt_end .
Моя наивная попытка простого теста воспроизвести некоторые из этих функций выглядит примерно так:
var times = new List<DateTime> {DateTime.Parse("2009-04-04"),
DateTime.Parse("2009-04-05")}.AsQueryable();
var query = from gps in Db.GPSDataPointSet
from t in times
where gps.Driver.Id == 1 && gps.UtcTime <= t
group gps by gps.Driver.Id
into ggps
select ggps.OrderByDescending(gps => gps.Id);
var test = query.ToList();
Но, очевидно, это не работает - я включаю это в надежде, что это может дать вам смутное представление о том, чего я пытаюсь достичь здесь. У кого-нибудь есть предложение, как я мог бы воспроизвести функциональность TVF в запросе LINQ to Entities, не будучи слишком неэффективным?