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

发布于 2024-07-25 00:22:51 字数 649 浏览 1 评论 0原文

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

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

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

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

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

I have a field in my database table that use to store an enumeration value, e.g.:

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

and in my C# class I have

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

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

now I want to write a Linq query that uses the MyStatus property of MyTable e.g.

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

but of course, Linq doesn't know how to interpret MyStatus as SQL.
What do I need to do to MyStatus in order for it to work in LinqToSQL?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

楠木可依 2024-08-01 00:22:51

查看此链接:

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

由于链接消失了 - 至少对我来说这个链接消失了die - 这是重要的部分:

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

Check out this link:

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

As links die - and at least for me this one did die - here is the important part:

[When adding the column to the entity] by default, the Type will come up as an "int (System.Int32)", but you can change it to the fully-qualified type of the enum (in my case, ConsoleApplication1.CustomerType). BUT, in order to locate it fully, you have to add the global identifier, as follows: global::ConsoleApplication1.CustomerType , so type that as is (but the equivalent for your namespace) into the textbox

年少掌心 2024-08-01 00:22:51

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

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

Don't have a compiler handy, but I think if you cast your enum to an int, it will work.
So try:

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文