2009-06-04 39 views
1

Ich bin nicht wirklich mit LINQ vertraut, aber ich arbeite derzeit an einem ASP.NET-Projekt und verwenden LINQ to SQL als ORM (ich bin eine Anwendung zur Routenplanung erstellen). Ich habe ein Problem damit, eine Anfrage so zu erstellen, wie ich sie brauche. Vielleicht könnte mir jemand einen Hinweis geben, wie ich das erreichen kann. Meine aktuelle Abfrage sieht so aus:LINQ-Abfrage-Hilfe (LINQ to SQL)

var results = from lift in db.Lift 
       where lift.StartTime > DateTime.Now 
        && lift.Route.Stop.Any(o => o.Location.Name.ToLower().Contains(origin)) 
        && lift.Route.Stop.Any(d => d.Location.Name.ToLower().Contains(destination)) 
       select lift; 

Diese Abfrage funktioniert und macht ihre Arbeit. Die Erweiterung, die ich benötigen würde, ist die folgende: jeder Stop hat ein Feld namens Order, das die Stop-Reihenfolge in einer bestimmten Route bestimmt. Meine Abfrage sollte alle Lifte auswählen, deren Route Stops hat, die der Reihenfolge und dem Ziel entsprechen (was die Abfrage bisher tut) UND wo der Ursprungsstopp eine niedrigere Bestellnummer als das Ziel Stop hat. Kann ich das mit LINQ machen oder muss ich die Ergebnisse danach filtern?

Vielen Dank im Voraus, Mathias

Antwort

2

Aus der Spitze von meinem Kopf .. so etwas wie dies versuchen (wahrscheinlich vereinfacht werden könnte):

wie ein Zauber
var results = from lift in db.Lift 
       let originStop = lift.Route.Stop. 
        FirstOrDefault(o => o.Location.Name.ToLower().Contains(origin)) 
       let destinationStop = lift.Route.Stop. 
        FirstOrDefault(d => d.Location.Name.ToLower().Contains(destination)) 
       where lift.StartTime > DateTime.Now 
        && originStop != null 
        && destinationStop != null 
        && originStop.OrderNumber < destinationStop.OrderNumber 
       select lift; 
+0

Works, danke :) – maff