所以这就是我的枚举。真的很基本。枚举没有相应的数据库表。相反,只要类具有MyEnum属性,数据库就会有一个int列。一切正常。
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.
所以我尝试编写这个Value扩展方法,但我意识到只允许我在比较的右侧取出MyEnum引用,因为我不能将该函数实际放在lambda表达式中。怎么办?
public static class Extensions
{
public static int Value(this MyEnum myEnum)
{
return (int)myEnum;
}
}
答案 0 :(得分:4)
直到下一个主要版本的EF(.NET 4.5),不支持。在.NET 4.5之前,您必须将int传递给您的查询(转换必须在查询之外完成)。最佳解决方法是this。
答案 1 :(得分:2)
刚刚开始施放:
public List<MyClass> FindAllOfEnum(MyEnum myEnum)
{
using (DbContext db = new DbContext())
{
return db.MyClasses.Where(x => x.MyEnum == (int)myEnum);
}
}