C# 将Enum DisplayName与搜索中的字符串进行比较
我有一个枚举值,我也使用“displayname”,我想将它作为参数传递给搜索,到目前为止我所做的是:C# 将Enum DisplayName与搜索中的字符串进行比较,c#,asp.net-mvc,linq,enums,C#,Asp.net Mvc,Linq,Enums,我有一个枚举值,我也使用“displayname”,我想将它作为参数传递给搜索,到目前为止我所做的是: public enum Gender { [Display(Name = "Man & Weman")] EvryOne = 0, [Display(Name = "Man")] Man = 1, //Etc... } public static class EnumExtensions { public static string G
public enum Gender
{
[Display(Name = "Man & Weman")]
EvryOne = 0,
[Display(Name = "Man")]
Man = 1,
//Etc...
}
public static class EnumExtensions
{
public static string GetEnumDisplayName(this Enum enumValue)
{
return enumValue.GetType()
.GetMember(enumValue.ToString())
.First()
.GetCustomAttribute<DisplayAttribute>()
.GetName();
}
public ActionResult EventsList(string query = null)
{
if (!string.IsNullOrWhiteSpace(query))
{
query = query.Trim();
upCommingLecture = upCommingLecture
.Where(g =>
g.Address.Contains(query) ||
Enum.IsDefined(typeof(Gender), query) ||
//Etc...
}
}
}
我得到的错误是:
LINQ to Entities无法识别方法“Boolean IsDefined(System.Type,System.Object)”方法,并且无法将此方法转换为存储表达式
因此,我需要做的是将GetEnumDisplayName
中的值与枚举列表中的GetEnumDisplayName
进行比较。
提前感谢您应该在查询外部执行
Enum.IsDefined
并使用布尔字段/属性将其传递给查询,因为IsDefined
方法无法转换为等效的SQL查询。我不确定我知道怎么做,我没有bool gander=Enum.IsDefined(typeof(Gender),query),但是如何在Where中使用它呢?请尝试使用bool
字段更改IsDefined
方法:upcombinglecture=upcombinglecture.Where(g=>g.Address.Contains(query)| | gander | |//等)代码>。它应该生成适当的SQL查询,以在LINQ中传递给实体。您应该在查询外部执行Enum.IsDefined
,并使用布尔字段/属性将其传递给查询,因为IsDefined
方法无法转换为等效的SQL查询。我不确定我知道怎么做,我做了bool gander=Enum.IsDefined(typeof(Gender),查询),但是如何在Where中使用它呢?请尝试使用bool
字段更改IsDefined
方法:upcombinglecture=upcombinglecture.Where(g=>g.Address.Contains(query)| | gander | |//等)代码>。它应该生成适当的SQL查询以在LINQ中传递给实体。
@Html.ActionLink("#ISFor " +
@Model.LectureGig.Gender.GetEnumDisplayName() +" "+ "|", "EventsList", "Events", new
{
@query = Model.LectureGig.Gender.GetEnumDisplayName()
}, null)