我有一个枚举:
[Flags]
public enum EmailType
{
PasswordRecovery = 1,
Activation = 2,
SendTicket = 4
}
例如,在表格中,我们的值等于3表示 - PasswordRecovery
,Activation
。
这是我的问题:
var emailType = EmailType.PasswordRecovery;
return Database.EmailSettings.FirstOrDefault(es => es.EmailType == (int)emailType);
当然,此查询无法正常运行:3 == 1 => false
。
如何正确过滤?
感谢。
更新
我正在使用Flags
属性,因为还有一个用XAF(devexpress框架)编写的应用程序,我在UI中有一个需要Flags
属性的功能。
答案 0 :(得分:4)
int emailType = (int)EmailType.PasswordRecovery;
return Database.EmailSettings.FirstOrDefault(es => (es.EmailType & emailType) == emailType);
修改:我添加了es.EmailType
以及int
以来的广告。
答案 1 :(得分:1)
Database.EmailSettings.FirstOrDefault(
es => es.EmailType.HasFlag(EmailType.PasswordRecovery));
答案 2 :(得分:0)
我认为EmailType == 3
是您的条件之一?也许您可以先使用其他条件获取结果,然后使用Enum.HasFlag方法在C#代码中使用此条件进行过滤。如果这是您要查询的唯一条件,也许您可以在DB中存储“1,2”而不是“3”。