2011-11-15 84 views
2

所以這裏是我的枚舉。真的很基礎。枚舉沒有相應的數據庫表。相反,只要一個類有MyEnum屬性,數據庫就有一個int列。這一切都很好。在實體框架中使用枚舉Where子句

public enum MyEnum : int 
{ 
    Zero = 0, 
    One = 1, 
    Two = 2 
} 

這是我的課,它在數據庫中有自己的表。

public class MyClass 
{ 
    public long MyClassID { get; set; } 
    public MyEnum { get; set; } 
} 

所以當我去取出一個MyClass對象時,MyEnum屬性被設置爲它相應的int值hooray。我的問題是,當我嘗試編寫使用MyEnum屬性的查詢時,出現錯誤。

public List<MyClass> FindAllOfEnum(MyEnum myEnum) 
{ 
    using (DbContext db = new DbContext()) 
    { 
     return db.MyClasses.Where(x => x.MyEnum == myEnum); 
    } 
} 

// ERROR: 
// The specified type member 'MyEnum' is not supported in LINQ to Entities. Only initializers, entity members, and entity navigation properties are supported. 

於是,我寫這個值的擴展方法,但我意識到,只允許我採取了比較的右手側MyEnum參考,因爲我不能把函數實際上在lambda表達式。做什麼?

public static class Extensions 
{ 
    public static int Value(this MyEnum myEnum) 
    { 
     return (int)myEnum; 
    } 
} 
+1

請在發佈之前使用搜索功能。有很多問題要問這個問題。 – Eranga

+4

那麼隨時隨地提供一個鏈接以及你的諷刺評論。 – OpticalDelusion

回答

2

只投以開始:

public List<MyClass> FindAllOfEnum(MyEnum myEnum) 
    { 
     using (DbContext db = new DbContext()) 
     { 
     return db.MyClasses.Where(x => x.MyEnum == (int)myEnum); 
     } 
    } 
+0

不會,這會導致我得到同樣的錯誤:LINQ to Entities不支持指定的類型成員'MyEnum'。僅支持初始化程序,實體成員和實體導航屬性。 編輯:其實,我得到「運營商」==' – OpticalDelusion

+0

編輯:其實,我得到「運營商'=='不能應用於類型'MyEnum'和'int'」的操作數如果我使用Object.Equals ,然後我得到了上面的錯誤 – OpticalDelusion

+1

對,我的意圖是與實際列進行比較:return db.MyClasses.Where(x => x.mycolumn ==(int)myEnum); –

4

不支持直到EF的下一個主要版本(.NET 4.5)。在.NET 4.5之前,您必須將int傳遞給您的查詢(轉換必須在您的查詢之外完成)。最好的解決方法是this