我有一个带有 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/