2010-06-10 5 views
10

Das Fehlen von Expression Trees in Compact Framework hat mich schon seit einiger Zeit gestört, aber ich habe nicht wirklich nach einer Lösung gesucht.Linq Expression Trees im Compact Framework

Heute habe ich einen Blog-Post über eine alternative System.Linq.Expressions auf Mono System.Core gebaut und z. von db4o (Sie finden es here).

Meine Frage ist - haben Sie diese Bibliothek benutzt und wenn ja, was waren Ihre Erfahrungen damit (besonders hinsichtlich der Leistung)?

+0

Ich sehe den Punkt nicht, es sei denn, sie erhalten schließlich System.Reflection.Emit, um auf "kompakten" Geräten zu arbeiten. – leppie

+1

@leppie: Nun, der Punkt ist, ausdruckbasierte LINQ-Abfragen auf dem Compact Framework zu haben. Auf diese Weise kann der Entwickler LINQ weiterhin zum Schreiben seiner Abfragen verwenden, und db4o kann die Ausdruck-basierte LINQ-Abfrage in den zugrunde liegenden Abfragemechanismus umwandeln. Für den Fall, dass der Ausdruck nicht von db4o optimiert werden kann, wird der Ausdruck interpretiert, um das Fehlen von SRE zu umgehen. –

Antwort

2

Für LINQ zu db4o funktioniert System.Linq.Expressions ziemlich gut. Es wird wahrscheinlich nicht der Flaschenhals einer Compact Framework-Anwendung sein, die eine Nicht-LINQ-Quelle an Objekte abfragt.

Wenn Sie es nur für einige Metaprogrammierungen verwenden und Compile over und and over verwenden, funktioniert es nicht so gut wie auf dem Desktop, da es sich im Grunde um einen reflektionsbasierten Interpreter handelt. Für was es wert ist, übergibt der Interpreter die vollständige Mono-Test-Suite für Expression Trees (es ist ziemlich konsequent).

Der einzige bekannte Fehler ist mit a missing feature of the Compact Framework BCL verwandt, was es unmöglich macht, dass csc einen korrekten Ausdrucksbaum aussendet, wenn generische Felder betroffen sind.

2

Dies beantwortet nicht direkt Ihre Frage, aber Sie können es interessant finden. IronPython und IronRuby werden mit dem Quellcode für die .NET 4.0-Implementierung von System.Linq.Expressions geliefert. Sie haben auch einen Interpreter für Linq/DLR Expression Trees. Tomáš Matoušek konnte IronRuby mit diesem Interpreter auf einem Windows Phone-Emulator arbeiten.