I have a EnumSearchExpressionProvider<TEnum>
class. I need to assign an instance of this class inside attribute called SearchableEnumAttribute
.
Here is my EnumSearchExpressionProvider<TEnum>
,
public class EnumSearchExpressionProvider<TEnum> : StringSearchExpressionProvider where TEnum : struct
{
public override ConstantExpression GetValue(string input)
{
if (!Enum.TryParse<TEnum>(input.Trim().Replace(" ", string.Empty), true, out var value))
{
throw new ArgumentException("Invalid search value.");
}
return Expression.Constant(value);
}
}
Here is my SearchableEnumAttribute
class,
[AttributeUsage(AttributeTargets.Property)]
public class SearchableEnumAttribute : SearchableAttribute
{
public SearchableEnumAttribute(Type enumType)
{
ExpressionProvider = new EnumSearchExpressionProvider<enumType>();
}
}
In my model, I'm using this attribute to one of the property as,
[SearchableEnum(typeof(Position))]
public string Position { get; set; }
here is my Position
Enum,
public enum Position
{
[Display(Name = "Accountant")]
Accountant,
[Display(Name = "Chief Executive Officer (CEO)")]
ChiefExecutiveOfficer,
}
However I'm getting compile error in this line in my SearchableEnumAttribute
constructor,
ExpressionProvider = new EnumSearchExpressionProvider<enumType>();
How to convert Type
to TEnum
? Am I doing something impossible or wrong? Is there any better way to do this? Please assist me.