2009-07-23 5 views
0

J'essaie d'étendre ma webapp avec IronPython, qui fonctionne à merveille jusqu'à présent, mais je n'arrive pas à l'utiliser correctement avec ma configuration NHibernateLinq.IronPython avec Linq throw ArgumentTypeException

Je fais un IQueryable <Case> disponible au code IronPython, puis j'utilise les méthodes LINQ pour filtrer vers le bas, comme:

Enumerable.Where[object](data, Func[object, bool](func)) 

Cela fonctionne très bien, mais parce que j'utilise Enumerable au lieu de Queryable, il retire tous les enregistrements de la base de données, avant d'exécuter le fonction sur eux, quand je veux la clause Where à ajouter à la requête SQL générée par NHibernate.

donc j'ai essayé:

Queryable.Where[object](data, Func[object, bool](func)) 

Mais que les rendements simplement:

Microsoft.Scripting.ArgumentTypeException: expected IQueryable[object], got Query[Case] 

Suis-je manque quelque chose? Est-ce seulement possible?

Anthony

Répondre

1

L'invariance générique vous cause des problèmes, fondamentalement. Un Func<object, bool> n'est pas convertible en Func<Case,bool> - au moins pas jusqu'à .NET 4.0

Notez que Queryable.Where nécessitera un arbre d'expression, pas un délégué. IronPython prend-il en charge les arborescences d'expression? Si vous pouvez produire un arbre d'expression en Python, pouvez-vous le faire Expression<Func<Case,bool>> au lieu de Expression<Func<Object,bool>>? Si vous le pouvez, cela devrait fonctionner.

+0

Je me suis un peu demandé à ce sujet. Je ne trouve aucune preuve d'arborescence d'expression prenant en charge IronPython, donc je suis passé à l'utilisation de HQL au lieu de Linq. À votre santé. – littlecharva

Questions connexes