2009-06-17 7 views
2

J'ai un champ dans ma table de base de données qui utilisent pour stocker une valeur d'énumération, par exemple:Comment utiliser mon énumération dans une requête LinqToSQL?

create table MyTable (
    ... 
    Status tinyint not null, 
    ... 
) 

et dans ma classe C# J'ai

public enum TStatus : byte { 
    Pending = 1  
    Active = 2, 
    Inactive = 3, 
} 

public TStatus MyStatus { 
    get { return (TStatus)Status; } 
    set { Status = (byte)value; } 
} 

maintenant je veux écrire une requête LINQ utilise la propriété MyStatus de MyTable par exemple

var q = MyDataContext.GetTable<MyTable>().Where(t => t.MyStatus == TStatus.Active); 

mais bien sûr, Linq ne sait pas comment interpréter MyStatus comme SQL. Que dois-je faire pour MyStatus afin qu'il fonctionne dans LinqToSQL?

Répondre

7

Vérifiez ce lien:

http://dotnet.org.za/hiltong/archive/2008/08/06/using-enums-with-linq-to-sql.aspx

Comme liens meurent - et au moins pour moi celui-ci ne meurt - voici la partie importante:

[Lorsque vous ajoutez la colonne l'entité] par défaut, le Type apparaîtra comme un "int (System.Int32)", mais vous pouvez le changer en le type complet de l'énumération (dans mon cas, ConsoleApplication1.CustomerType). Mais, afin de localiser pleinement, vous devez ajouter l'identificateur global, comme suit: global :: ConsoleApplication1.CustomerType, tapez alors que tout comme (mais l'équivalent pour votre espace de noms) dans la zone de texte

+1

+1 - Beats my idea –

+0

Même message que je suis allé à plusieurs reprises (chaque fois que j'ai oublié comment faire). Aussi la première fois que j'ai pu réellement voir le qualificatif global au travail. – Will

+0

Réponse parfaite - merci! Encore mieux que cela provienne d'un blog sud-africain! Voerspoed! –

0

Don Je n'ai pas de compilateur à portée de main, mais je pense que si vous lancez votre énumération dans un int, cela fonctionnera. Essayez donc:

var q = MyDataContext.GetTable(). Où (t => t.MyStatus == (int) TStatus.Active);

Questions connexes