如何在LinqToSQL查询中使用我的枚举?

时间:2009-06-17 15:33:47

标签: c# linq linq-to-sql enums

我的数据库表中有一个用于存储枚举值的字段,例如:

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

在我的C#课程中我有

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

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

现在我想写一个使用MyStatus MyTable属性的Linq查询,例如

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

但当然,Linq不知道如何将MyStatus解释为SQL。 我需要对MyStatus做什么才能在LinqToSQL中工作?

2 个答案:

答案 0 :(得分:7)

点击此链接:

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

随着链接死亡 - 至少对我来说这个人确实死了 - 这是重要的部分:

  

[在向实体添加列时]默认情况下,Type将显示为“int(System.Int32)”,但您可以将其更改为枚举的完全限定类型(在我的情况下, ConsoleApplication1.CustomerType)。但是,为了完全定位它,您必须添加全局标识符,如下所示:global :: ConsoleApplication1.CustomerType,因此在文本框中按原样键入(但名称空间的等效项)

答案 1 :(得分:0)

没有编译器方便,但我认为如果你将你的枚举转换为int,它将起作用。 所以试试:

var q = MyDataContext.GetTable()。其中​​(t =&gt; t.MyStatus ==(int)TStatus.Active);