2011-11-15 6 views
2

これは私の列挙型のためです。本当に基本的。 enumには対応するデータベーステーブルがありません。むしろ、クラスに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型の値に設定されています。私の問題は、私は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の参照を取り出すことができるようになることに気づきましたラムダ式。何ですか?

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

いいえ、これと同じエラーが発生します。指定した型メンバー 'MyEnum'は、LINQ to Entitiesではサポートされていません。初期化子、エンティティメンバー、エンティティナビゲーションプロパティのみがサポートされています。 編集:実際には、私は "演算子== 'を得る – 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です。

関連する問題