2015-01-13 10 views
7

ein paar Tage zurück, um die neue ORM für delphi von Devart EntityDAC genannt, auch ich las die Dokumente bestimmten die LINQ Teil, wenn ich so etwas wie sah:Ist das Lambda? wenn nicht was ist es? ich habe versucht

Linq.From(Emp).Where(Emp['Sal'] > 1000) 

bekam, dass mir zu sagen, aufwachen Den ersten Moment habe ich gesehen. der Ausdruck "Emp ['Sal']> 1000" ist kein Lambda-Ausdruck ?! Seit der Testversion kommt diese Komponente nicht mit Quellen, ich konnte nicht herausfinden, wo die Funktion/Prozedur deklariert ist.

Referenz: http://www.devart.com/entitydac/docs/ -> Linq Abfragen -> Linq Syntax -> Blättern Sie nach unten, wo Sitzung

+1

Ich glaube nicht, dass Pascal sein kann, weil der 'Emp ['Sal']> 1000' Ausdruck ausgewertet wird, bevor er' Where' aufruft. Warum fragst du Devart nicht? –

+2

EntityDAC ist für .net und Delphi verfügbar und natürlich ist der linq Teil anders. Aber es gibt auch ein Kapitel [Angeben von LINQ-Abfrage-Argumenten als String] (http://www.devart.com/entitadac/docs/specify_linq_query_arguments_as_string.htm) und ich denke, Sie müssen das mit Delphi verwenden –

+1

@DavidHeffernan Was ist mit dem Überladen von Operatoren ? Könnten Sie etwas nicht erreichen, indem Sie beispielsweise eine Liste von Werten im Operator-Übersteuerungscode erstellen und diese Liste dann im where verwenden? Sie geben effektiv ein nicht verwendetes Ergebnis zurück. – Graymatter

Antwort

12

I mentioned this in a blog post a few months ago. Ich habe nicht die Quelle zu sehen, aber es ist fast sicher auf diese Weise getan:

  • der Ausdruck Emp['Sal'] einen Wert eines record Typ liefert
  • Dieser Datensatz Bediener Überlastungen erklärt darauf
  • Delphi definiert Bediener Überlastungen hat als Funktionen und erfordert nicht, dass sie einen bestimmten oder intuitiven Typ zurückgeben. Daher gibt der Operator > hier keinen booleschen, sondern einen anderen Datensatz zurück.
  • Durch Verketten dieser Operatoren kann ein Ausdrucksbaum erstellt werden, der von seinem LINQ-Evaluator ausgewertet werden kann.
+0

thx für Ihre Aufmerksamkeit, ich wusste nicht, dass Delphi diese Funktion hatte. Ich werde sicherlich weiter schauen – kabstergo