Как это не работает в запросе к базе данных?
Вы не показываете свою полную реализацию или ваше отображение.Вы сохраняете TargetAudience
в виде числового типа данных?
Если вы не перепрыгиваете через некоторые обручи, ваше перечисление будет сохранено в виде текста в базе данных, поэтому вы не сможетевыполнять побитовые операции над ним. (Это поведение противоречит тому, что я видел в блогах и т. д., поэтому я не знаю (а), изменилось ли оно по сравнению с предыдущими версиями, (b) если он каким-то образом уникален для провайдера SQLite, который я использую, или (c) если он отображен таким образом Fluent NHibernate.)
Вы можете выполнить текстовое сравнение.Объединенные флаги сохраняются в виде списка через запятую, поэтому TargetAudience.Audience4 | TargetAudience.Audience1
будет сохраняться не как 9
, а как Audience1, Audience4
.Обратите внимание, что он сохраняется в порядке возрастания, даже если я указал их в обратном порядке.
var query = session.Linq<File>()
.Where(f => f.TargetAudience.ToString() == "Audience1, Audience4");
Вы можете написать несколько методов [extension] в короткие сроки, которые инкапсулируют гадость при выполнении этих текстовых сравнений.
edit:
См. Как отобразить перечисление в виде значения int с беглым NHibernate? для получения информации о сохраняющихся перечислениях как целых числах