2010-02-10 11 views
5

Mam zasadniczo enumLINQ i wyliczenia jako IQueryable

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

i chciałby zrobić porównanie przed wejściem, co zdarza się ciąg

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

Najlepszą rzeczą mogę przyjść z czymś takim było to, że jest jakiś lepszy sposób to zrobić?

Edytuj: Dzięki Aaron & Jason. Ale co, jeśli analiza nie powiedzie się?

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

Zobacz http://msdn.microsoft.com/en-us/library/kxydatf9.aspx dla wyjątków, które mogą zostać wyrzucone. – dugas

Odpowiedz

10

Czy próbujesz konwertować string do instancji WorkingDays? Jeśli więc używać Enum.Parse:

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

Tutaj używamy przeciążenie Enum.Parse(Type, string, bool) gdzie parametr bool wskazuje, czy zignorować sprawę.

Na marginesie, należy zmienić nazwę na WorkingDays na WorkingDay. Spójrz na to. Gdy masz instancję WorkingDay, powiedzmy,

WorkingDay day = WorkingDay.Monday; 

note że day jest dniem roboczym (czyli WorkingDay), a nie dni roboczych (w ten sposób nie WorkingDays). Aby uzyskać dodatkowe wskazówki dotyczące wyliczania nazw, zobacz Enumeration Type Naming Guidelines.

2

Here's sposób nie Linq.

EDYCJA: To w zasadzie sposób Jasona. Wysłał przede mną. Daj mu to.

+0

+1 dla Ciebie w każdym razie :) – ram

1

użycie IsDefined link text

+0

W rzeczywistości, używanie IsDefined nie jest najlepszym sposobem na sprawdzenie zasięgu w ten sposób. (Wytyczne dotyczące projektowania ram, wydanie 2, str. 181-182). Metoda Enum.IsDefined jest oszukańczo droga z powodu dużej refleksji i nie zawsze gwarantuje poprawne wyniki dla strony wywoławczej. –

0

udało mi się przekonwertować enum w IQueryable przez wypełnianie zbiór listy.

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