2015-09-04 2 views
0

Basicly J'ai un champ de drapeau similaire à ceElasticSearch Drapeaux Nest C#

[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 ???) 

Mon problème est que ici je ne peux pas trouver un moyen de rechercher des entrées où seule ma FirstFlag est nécessaire. Est-ce que je m'approche de ce problème? Dois-je utiliser 2 propriétés à la place?

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))); 

Quelle est la meilleure approche ici? Recommanderiez-vous de ne pas utiliser de drapeaux du tout et de passer par les propriétés?

Répondre

1

Il y a plusieurs approches que vous pouvez prendre ici

  1. Faire la propriété un ensemble de valeurs ENUM
  2. Utilisez une coutume JsonConverter sérialisation d'un ENUM avec le FlagsAttribute à une collection et désérialiser une collection à un ENUM
  3. ont des propriétés distinctes que vous avez suggéré

je choisirais personnellement numéro 2 car il vous permettra de travailler avec l'enum tel quel dans le code, mais stockez le champ en tant que collection dans Elasticsearch et interrogez-le facilement.