LINQ&枚举为IQueryable

时间:2010-02-10 02:09:33

标签: c# .net linq enums iqueryable

我基本上有一个枚举

public enum WorkingDays
    {
        Monday, Tuesday, Wednesday, Thursday, Friday
    }

并希望对输入进行比较,输入恰好是字符串

//note lower case
string input = "monday";

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

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

有没有更好的方法呢?

编辑:谢谢Aaron&amp;杰森。但是,如果解析失败了怎么办?

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

4 个答案:

答案 0 :(得分:10)

您是否尝试将string转换为WorkingDays的实例?如果是,请使用Enum.Parse

WorkingDays day = (WorkingDays)Enum.Parse(typeof(WorkingDays), "monday", true);

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

另外,您应该将WorkingDays重命名为WorkingDay。看这样。如果您拥有WorkingDay的实例,请说明

WorkingDay day = WorkingDay.Monday;

请注意day是工作日(因此WorkingDay)而非工作日(因此不是WorkingDays)。有关命名枚举的其他指南,请参阅Enumeration Type Naming Guidelines

答案 1 :(得分:2)

Here's非Linq方式。

编辑:这基本上是杰森的方式。他在我面前张贴。给他一点荣誉。

答案 2 :(得分:1)

使用IsDefined link text

答案 3 :(得分:0)

我能够通过填充List集合将枚举转换为IQueryable。

// Create list to hold enum values
List<string> WorkingDaysList = new List<string>();

// loop thru enum values and store in List
foreach (var value in Enum.GetValues(typeof(WorkingDays)))
{
    var _WorkingDaysList = ((WorkingDays)value).ToString();
    WorkingDaysList.Add(_WorkingDaysList);
}
// use linq to query list       
var result = (from d in WorkingDaysList where d.ToLower() == input.ToLower() select d).FirstOrDefault();