Ich habe einige SQL, die ich in LINQ zu Entities replizieren möchte. Es hat zu dieser Zeit eine Tabelle mit einer DateTime-Spalte und einem GPS-Standort für eine andere Entität im System. Es verbindet diese Tabelle mit der Ausgabe einer Tabellenwertfunktion, die eine "Zeittabelle" über einen bestimmten Zeitraum generiert. Der Code für diese TVF sieht ungefähr so aus:LINQ zu Entitäten, um eine Verknüpfung zu einer generierten Tabelle zu ersetzen
WHILE @dt_start <= @dt_end
BEGIN
INSERT INTO @res (dt) VALUES (@dt_start)
SET @dt_start = dateadd(ms, @interval_ms, @dt_start)
END -- WHILE
so ist, dann ist das Ergebnis daraus ist Quer eine Liste von GPS-Positionen für das Unternehmen an jeden der erzeugten Zeiten von dt_start zu geben, verbunden dt_end.
Mein Naive Versuch einer einfachen Test sieht aus wie etwas, einige dieser Funktionalität zu replizieren:
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();
Aber offensichtlich funktioniert das nicht - ich schließe es in der Hoffnung, Sie könnte es eine vage Vorstellung geben von dem, was ich hier erreichen will. Hat jemand einen Vorschlag dafür, wie ich die TVF-Funktionalität in einer LINQ to Entities-Abfrage replizieren könnte, ohne dass dies zu ineffizient ist?
Warum funktioniert es nicht? – Timwi