开发者

LINQ & Enums as IQueryable

开发者 https://www.devze.com 2022-12-19 13:29 出处:网络
I basically have an enum public enum WorkingDays { Monday, Tuesday, Wednesday, Thursday, Friday } and would like to do a comparison against an input, which happens to be a string

I basically have an enum

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

and would like to do a comparison against an input, which happens to be a string

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

The best thing 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()
                               se开发者_高级运维lect d).FirstOrDefault();

Is there any better way to do it ?

Edit: Thanks Aaron & Jason. But what if the parse 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);
            }


Are you trying to convert a string to an instance of WorkingDays? If so use Enum.Parse:

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

Here we are using the overload Enum.Parse(Type, string, bool) where the bool parameter indicates whether or not to ignore case.

On a side note, you should rename WorkingDays to WorkingDay. Look at like this. When you have an instance of WorkingDay, say,

WorkingDay day = WorkingDay.Monday;

note that day is a working day (thus WorkingDay) and not working days (thus not WorkingDays). For additional guidelines on naming enumerations, see Enumeration Type Naming Guidelines.


Here's a non-Linq way.

EDIT: It's basically Jason's way. He posted before me. Give the kudos to him.


use IsDefined link text


I was able to convert an enum into a IQueryable by populating a List collection.

// 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

精彩评论

暂无评论...
验证码 换一张
取 消