2010-06-10 10 views
10

Le manque d'arborescence d'expression dans Compact Framework m'a dérangé depuis un certain temps, mais je n'ai pas vraiment cherché de solution.Linq Expression Trees dans Compact Framework

Aujourd'hui, j'ai trouvé un post de blog sur une alternative System.Linq.Expressions construite sur Mono System.Core et utilisée par exemple. par db4o (vous pouvez le trouver here).

Ma question est - avez-vous utilisé cette bibliothèque et si oui, quelles ont été vos expériences avec elle (en particulier en ce qui concerne les performances)?

+0

Je ne vois pas le point, à moins qu'ils finissent par obtenir 'System.Reflection.Emit' pour fonctionner sur des périphériques 'compacts'. – leppie

+1

@leppie: bien, le point est d'avoir des requêtes LINQ basées sur l'expression sur le Compact Framework. De cette façon, le développeur peut toujours utiliser LINQ pour écrire ses requêtes, et db4o peut transformer la requête LINQ basée sur l'expression en son mécanisme d'interrogation sous-jacent. Dans le cas où l'expression ne peut pas être optimisée par db4o, l'expression est interprétée, pour contourner l'absence de SRE. –

Répondre

2

Pour LINQ à db4o, System.Linq.Expressions fonctionne plutôt bien. Il ne sera probablement pas le goulot d'étranglement d'une application Compact Framework interrogeant une source non LINQ à des objets. Si vous l'utilisez simplement pour faire de la méta-programmation, en utilisant Compiler encore et encore, il ne fonctionnera pas aussi bien que sur le bureau, car il s'agit essentiellement d'un interpréteur basé sur la réflexion. Pour ce que ça vaut, l'interprète passe la suite complète de tests Mono pour les arbres d'expression (c'est assez conséquent).

Le seul bug connu est lié à a missing feature of the Compact Framework BCL, ce qui rend impossible pour csc d'émettre un arbre d'expression correct lorsque des champs génériques sont impliqués.

2

Ceci ne répond pas directement à votre question, mais vous pouvez trouver cela intéressant. IronPython et IronRuby sont livrés avec le code source pour l'implémentation .NET 4.0 de System.Linq.Expressions. Ils ont aussi un interprète pour Linq/DLR Expression Trees. Tomáš Matoušek a réussi à faire fonctionner IronRuby sur un émulateur Windows Phone en utilisant cet interpréteur.