LINQ和Enums作为IQueryable

ram*_*ram 5 .net c# linq enums iqueryable

我基本上有一个枚举

public enum WorkingDays
    {
        Monday, Tuesday, Wednesday, Thursday, Friday
    }
Run Code Online (Sandbox Code Playgroud)

并且想要对输入进行比较,输入恰好是一个字符串

//note lower case
string input = "monday";
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的事情是这样的

WorkingDays day = (from d in Enum.GetValues(typeof(WorkingDays)).Cast<WorkingDays>()
                               where d.ToString().ToLowerInvariant() == input.ToLowerInvariant()
                               select d).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法呢?

编辑:谢谢Aaron&Jason.但是如果解析失败怎么办?

if(Enum.IsDefined(typeof(WorkingDay),input))//cannot compare if case is different
            {
                WorkingDay day = (WorkingDay)Enum.Parse(typeof(WorkingDay), input, true);
                Console.WriteLine(day);
            }
Run Code Online (Sandbox Code Playgroud)

jas*_*son 10

您是否尝试将a转换string为实例WorkingDays?如果是这样使用Enum.Parse:

WorkingDays day = (WorkingDays)Enum.Parse(typeof(WorkingDays), "monday", true);
Run Code Online (Sandbox Code Playgroud)

这里我们使用过载Enum.Parse(Type, string, bool),其中bool参数指示是否忽略大小写.

另外,您应该重命名WorkingDays为WorkingDay.看这样.当你有一个实例时WorkingDay,比方说,

WorkingDay day = WorkingDay.Monday;
Run Code Online (Sandbox Code Playgroud)

请注意,这day是一个工作日(因此WorkingDay)而不是工作日(因此不是WorkingDays).有关命名枚举的其他指南,请参阅枚举类型命名准则.