J'ai un SQL que je cherche à répliquer dans LINQ to Entities. Il a une table avec une colonne DateTime et un emplacement GPS à ce moment-là pour une autre entité dans le système. Il CROSS JOINS cette table à la sortie d'une fonction table valorisée qui génère une "table de temps" sur une période spécifique. Le code de cette TVF ressemble à:LINQ to Entities pour remplacer une jointure par une table générée
WHILE @dt_start <= @dt_end
BEGIN
INSERT INTO @res (dt) VALUES (@dt_start)
SET @dt_start = dateadd(ms, @interval_ms, @dt_start)
END -- WHILE
donc le résultat de cette croix est jointe à donner une liste des emplacements GPS pour l'entité à chacun des temps générés par dt_start à dt_end.
Mon Naive tentative d'un test simple de reproduire une partie de cette fonctionnalité ressemble à quelque chose comme ceci:
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();
Mais évidemment, cela ne fonctionne pas - j'inclure dans l'espoir qu'il pourrait vous donner une vague idée de ce que j'essaie de réaliser ici. Quelqu'un at-il une suggestion sur la façon dont je pourrais répliquer la fonctionnalité TVF dans une requête LINQ to Entities, sans que ce soit trop inefficace?
Pourquoi ça ne marche pas? – Timwi