2009-06-17 7 views
2

Ich habe ein Feld in meiner Datenbank-Tabelle, die einen Aufzählungswert zu speichern, verwenden, zB:Wie verwende ich meine Enumeration in einer LinqToSQL-Abfrage?

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

und in meiner C# Klasse Ich habe

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

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

jetzt ich eine Linq-Abfrage schreiben mag, verwendet die MyStatus Eigenschaft von MyTable z

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

aber natürlich kennt Linq nicht, wie MyStatus wie SQL zu interpretieren. Was muss ich mit MyStatus tun, damit es in LinqToSQL funktioniert?

Antwort

7

Check out this link:

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

als Links sterben - und zumindest für mich diese nicht gestorben - hier ist der wichtige Teil:

[Beim Hinzufügen der Spalte die Entität] Standardmäßig wird der Typ als "int (System.Int32)" angezeigt, aber Sie können ihn in den vollständig qualifizierten Typ der Enumeration ändern (in meinem Fall ConsoleApplication1.CustomerType). Aber, um es vollständig zu finden, müssen Sie die globale Kennung hinzuzufügen, wie folgt: global :: ConsoleApplication1.CustomerType, so dass Typ wie (aber das Äquivalent für Ihren Namensraum) in die Textbox

+1

+1 - Beats meine Idee –

+0

Gleicher Beitrag Ich war schon mehrmals (jedes Mal, wenn ich das vergesse). Auch beim ersten Mal sah ich den globalen Qualifier bei der Arbeit. – Will

+0

Perfekte Antwort - danke! Noch besser, dass es von einem südafrikanischen Blog kommt! Voerspoed! –

0

Don Ich habe keinen Compiler zur Hand, aber ich denke, wenn Sie Ihre enum auf einen int setzen, wird es funktionieren. So versuchen:

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

Verwandte Themen