c# - 如何查询带有特定枚举标志的对象,使用 db int 来存储它

标签 c# .net-4.0 entity-framework-4.1

我有一个带有 Flag 枚举的对象,它有几种可能的“用途”。标志枚举使用 2 的正确幂。

检查变量是否有特定标志,我可以使用 .NET 4 HasFlag()

但是:

如果我将该标志组合作为一个 int 存储在数据库中...我如何使用 Entity Framework 检索具有特定标志的对象?

例如,如果我的对象是“Contact”类型,我想查询其中实际上是“Customers and Friends”的对象,即 中的 Customers and Friends 标志ContactType 枚举。

最佳答案

我怀疑任何 ORM 是否有办法将 HasFlags 调整为适合您的 DBMS 的 SQL 代码。

您可能需要做的是编写一个存储过程,或者手动启动要为此执行的 SQL 语句。

您没有提到您使用的是什么 DBMS - 但如果我假设您使用的是 SQL Server,那么您很幸运,因为它有 & (Bitwise AND) operator .

作为 T-SQL 的实际示例:

-- Setup Test Data 
DECLARE @Contacts TABLE (id int, contactType int, name nvarchar(MAX)) 

INSERT INTO @Contacts VALUES (1, 0, 'Fred'); -- Not Wanted
INSERT INTO @Contacts VALUES (2, 3, 'Jim');  -- Wanted
INSERT INTO @Contacts VALUES (3, 36, 'Mary');  -- Not wanted
INSERT INTO @Contacts VALUEs (4, 78, 'Jo');  -- Wanted

-- Execute Query
SELECT *
FROM @Contacts
WHERE ContactType & 2 = 2 

关于c# - 如何查询带有特定枚举标志的对象,使用 db int 来存储它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750355/

相关文章:

entity-framework-4.1 - Entity Framework 代码优先 : FOREIGN KEY constraint may cause cycles or multiple cascade paths

c# - KeyDown KeySuppress 是否取消 KeyUp 事件?

c# - EFCore 删除引用的实体

c# - CSS 不在转发器内格式化

c# - 创建类型并在运行时初始化它

c# - 打印按钮在报告查看器条件下在 Firefox 中不显示

c# - 手动更新 Entity Framework 中集合的修改状态

windows - C# 当托管线程结束其时间片时,它会引发上下文切换吗?

sql - SP :CacheHit Event in SQL Profiler 的说明

asp.net - 使用默认成员关系的 MVC3 Entity Framework