Index the value of an Enum, not the string

无人久伴 提交于 2019-12-02 07:32:05

问题


Is it possible to index the value of an Enum instead of its string representation using Solrnet?

Say I have to following enum:

[Serializable]
[Flags] 
public enum Gender
{
  Male = 0,
  Female = 1
}

and add a solr attribute to the Gender property of a User class:

[SolrField("gender")]
public virtual Gender Gender { get; set; }

If I index the entity using:

solr.Add(user)

then it will index 'Male' as gender instead of 0. Is it possible to have it index 0 instead?

Edit: I'd prefer not to add an extra property for this, like Ondrej proposes.


回答1:


You can do this by implementing ISolrFieldSerializer. If the type IsEnum, serialize by casting to int. Otherwise delegate to DefaultFieldSerializer. Use the other field serializers for reference.

Hooking up your field serializer depends on the chosen IoC container, check the container's documentation.




回答2:


Try this:

[SolrField("gender")]
public int GenderAsInt
{
    get { return (int) Gender; }
    set { Gender = (Gender) value; }
}

public virtual Gender Gender { get; set; }

Also note that declaring your enum as [Flags] doesn't make much sense:

  • There will hardly be anyone both Male and Female
  • Male will be interpreted as the default in respect to the current values of enum fields


来源:https://stackoverflow.com/questions/8668275/index-the-value-of-an-enum-not-the-string

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!