LINQ & Enums as IQueryable

I basically have an enumeration

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

and would like to make a comparison with the input, which is a string

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

The best I could come up with was something like this

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

Is there a better way to do this?

Edit: Thanks to Aaron and Jason. But what if parsing fails?

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

Are you trying to convert stringto an instance WorkingDays? If so, use Enum.Parse:

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

Here we use overloading Enum.Parse(Type, string, bool), where the parameter boolindicates whether to ignore case.

WorkingDays WorkingDay. . WorkingDay, ,

WorkingDay day = WorkingDay.Monday;

, day - ( WorkingDay), ( , WorkingDays). .

+10

Linq.

: . . .

+2

IsDefined

+1

IQueryable, List.

// 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();
0

All Articles