linq-To-Sql:带枚举的过滤器(标志)

时间:2012-06-20 08:26:43

标签: c# linq linq-to-sql

我有一个枚举:

[Flags]
public enum EmailType
{
    PasswordRecovery = 1,
    Activation = 2,
    SendTicket = 4
}

例如,在表格中,我们的值等于3表示 - PasswordRecoveryActivation。 这是我的问题:

var emailType = EmailType.PasswordRecovery;
return Database.EmailSettings.FirstOrDefault(es => es.EmailType ==  (int)emailType);

当然,此查询无法正常运行:3 == 1 => false。 如何正确过滤?
感谢。

更新 我正在使用Flags属性,因为还有一个用XAF(devexpress框架)编写的应用程序,我在UI中有一个需要Flags属性的功能。

3 个答案:

答案 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”。