2015-09-04 2 views
0

Основном у меня есть поле флага, подобное этомуElasticSearch Nest Флаги с #

[Flags] 
public enum MyFlags 
{ 
    FirstFlag = 1, 
    SecondFlag = 2 
} 

public class MyClass 
{ 
    public int Id {get;set;} 
    public MyFlags MyFlagProperty { get; set; } 
} 

Client.Search<T, TResult>(c=>c.Query ???) 

Моя проблема в том, что я не могу найти какой-либо способ поиска записей, где требуется только мой FirstFlag. Я подхожу к этому неправильно? Должен ли я использовать 2 свойства?

public class MyClass 
{ 
    public int Id {get;set;} 
    public bool MyFirstFlag { get; set; } 
    public bool MySecondFlag { get; set; } 
} 

Client.Search<T, TResult>(c => c.Query(d => d.Term("MyFirstFlag", true))); 

Каков наилучший подход здесь? Вы порекомендовали бы не использовать флаги вообще и просто идти по свойствам?

ответ

1

Есть несколько подходов можно взять здесь

  1. Сделать свойство набора перечисления значениями
  2. использовать пользовательский JsonConverter сериализовать перечисление с FlagsAttribute в коллекцию и десериализации коллекции перечисления
  3. есть отдельные свойства, как вы предложили

Я бы лично выбрать номер 2, так как это позволит вам работать с перечислением как в коде, но сохраните поле в виде коллекции в Elasticsearch и легко запросите его.