【问题标题】:How do I use my enumeration in a LinqToSQL query?如何在 LinqToSQL 查询中使用我的枚举?
【发布时间】:2009-06-17 15:33:47
【问题描述】:

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

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; }
}

现在我想编写一个 Linq 查询,它使用 MyTableMyStatus 属性,例如

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

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

【问题讨论】:

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


    【解决方案1】:

    查看此链接:

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

    随着链接的消亡——至少对我而言,这个链接确实消亡了——这是重要的部分:

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

    【讨论】:

    • 同一个帖子我去过好几次(每次我都忘了怎么做)。也是我第一次真正看到全球预选赛的工作。
    • 完美答案 - 谢谢!更好的是它来自南非的博客! Voerspoed!
    【解决方案2】:

    手边没有编译器,但我认为如果将枚举转换为 int,它会起作用。 所以试试:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多