J'essaie de construire de manière dynamique un arbre d'expression en C #, qui est compilé et utilisé comme prédicat pour LINQ-TO-SQL où () appelez. Le problème est que j'essaie de comparer une énorme (avec Int comme type sous-jacent) directement contre un int, mais cela échoue avec l'erreur "Le membre myenumType n'a aucune traduction prise en charge sur SQL".
code: P>
Expression.Convert(enumMember, typeof(int))
4 Réponses :
Essayez
Cela ne compile pas: "Impossible de convertir le type 'System.Linq.Expressions.memberexpression' to 'int'"
Heh, Sjoerd serait correct ... Si Enumd (I> était une énumération réelle et non une abstraction d'arborescence d'expression d'un.
Regardez mon ami Tout d'abord, vous devez modifier votre énumérum pour être comme celui-ci:
int x = (int) myenum.item1;
Cette réponse est un malentendu clair de la question - l'OP veut savoir comment utiliser des arbres d'expression pour travailler avec des types ENum. Aussi - Enums sont naturellement de type 'int' dans le CLR. Cette question est une recherche de recherche élevée pour les expressions C # avec Enums et, en tant que telle, cette réponse devrait être inférieure à la réponse plus appropriée de @Philsoady
Tout simplement, vous ne devriez pas avoir à être, tant que vous avez dit Linq-to-SQL sur l'ENUM (plutôt que de la mapper comme un Le point principal est que mon De même, vous ne devriez pas lui donner un 1, mais plutôt l'énum de dactylographié; Par exemple: p> (si tout ce que vous savez est int code> et avoir un séparé < / em> propriété en C # qui fait la traduction). Par exemple, les œuvres suivantes fonctionne bien:
une propriété code> est mappé dans le DBML à l'ENUM. Il suffit de dépasser le nom de type avec le type ENum (y compris l'espace de noms). P>
1 code>) p> p>
Merci à Marc Gravell. (Expression Guru!) Voir la bonne réponse.
J'ai apporté une modification d'une routine d'expression pour répondre à ce scénario.
Propriétés normales ou enums. Au cas où quelqu'un trouve cette utile
ne savent pas de savoir comment obtenir la valeur de l'énumé dans l'arbre d'expression
Après plus de creusement, j'ai décidé que le problème ici est avec ma compréhension LINQ-TO-SQL plutôt qu'avec l'expression elle-même. La propriété Enum sur mon objet entité n'est pas en réalité une colonne dans la base de données; Je pense que c'est pourquoi il n'est pas capable de le traduire vers une clause où. Je vais adopter une approche différente, mais si quelqu'un a des idées, n'hésitez pas à partager.
Pouvez-vous également fournir le code de MyClass? Le code que vous avez actuellement dans le poteau est une location assez achalandée, pas beaucoup à raconter à partir d'ici ...