11
votes

Comment convertir un ENum à un int pour utilisation dans une opération d'expression.equals?

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))


3 commentaires

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 ...


4 Réponses :


0
votes

Essayez xxx


2 commentaires

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.



0
votes

Regardez mon ami Tout d'abord, vous devez modifier votre énumérum pour être comme celui-ci:

int x = (int) myenum.item1;


1 commentaires

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



7
votes

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 int et avoir un séparé < / em> propriété en C # qui fait la traduction). Par exemple, les œuvres suivantes fonctionne bien: xxx

Le point principal est que mon une propriété 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).

De même, vous ne devriez pas lui donner un 1, mais plutôt l'énum de dactylographié; Par exemple: xxx

(si tout ce que vous savez est 1 )


0 commentaires

3
votes

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 xxx


0 commentaires