【发布时间】:2013-02-01 17:18:48
【问题描述】:
我为我的枚举创建了 Enum ToFrendlyString 函数,但我不能在 Linq 中使用。
public enum MyEnum
{
Queued = 0,
[Description("In progress")]
In_progress = 2,
[Description("No answer")]
No_answer = 6,
}
public static class EnumToFrendlyString
{
public static string ToFrendlyString(this Enum value)
{
return value.GetEnumDescription();
}
public static string GetEnumDescription(this Enum value)
{
FieldInfo fi = value.GetType().GetField(value.ToString());
var attributes =
(DescriptionAttribute[])fi.GetCustomAttributes(
typeof(DescriptionAttribute),
false);
if (attributes.Length > 0)
return attributes[0].Description;
return value.ToString();
}
}
当我尝试在 Linq 中使用这个函数时,我得到了错误
var res = collection.AsQueryable().Where(p => p.UserID == UserID).OrderByDescending(p=> p.DateCreated).Select(p => new MyClass
{
Date = p.DateCreated.ToString(),
Status = p.Status.ToFrendlyString(),
}).Take(10).ToList();
如果我在同一个类中创建另一个函数,比如
private string MyStatusToString(MyEnum status)
{
return status.ToFrendlyString();
}
并更改我的 Linq 以使用此功能,然后一切正常。
错误
Expression of type 'DAL.MyEnum' cannot be used for parameter of type 'System.Enum' of method 'System.String ToFrendlyString(System.Enum)'
【问题讨论】:
-
当你有一个非常好的数字枚举时,为什么要查询字符串状态?
-
您的错误引用了
MyEnum,但您的枚举是MyStatus。p.Status真的是枚举类型吗? -
@Trickery, couze 我将该结果作为 ajax 返回,我不想让 JS 逻辑呈现为字符串。
-
@MikeC 有写入错误,我重命名了我的课程等等,现在编辑不好
-
您的代码对我来说很好用。您能否包含显示问题的简短但完整的示例代码?
collection的类型是什么?
标签: c# linq enums extension-methods