Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the simplest way to compare an enum to a integer value return from a DB

I'm pulling some data from a table using LINQ 2 SQL...one of the pieces of data is a value that represents an enumation in my application code.

What is the simplest way to make a comparison between the data returned in LINQ objects and the enumeration in the application code. So for example

enum SomeEnum
{
  First
  Second
}

then in the method I have

Table<LinqObject> objects = dc.GetTable<LinqObject>();

foreach (var item in objects)
{
   // What's the simplest way to do this comparison???
   if (item.SomeNullableInteger == SomeEnum.First) // Note I realise this doesn't work!!!
   {
      // Do something...
   }
}

I could do this

SomeEnum.First.Equals(item.SomeNullableInteger)

or I could store the enumeration names in the database and then i'd be able to do this

Enum.GetName(SomeEnum, SomeEnum.First) == item.SomeNullableName

is there a better way? The enum only has two items and they're pretty fixed...could maybe have a third or a fourth but will probably never grow beyond that. So having a whole table seems like overkill.

Actually this is a duplicate of C# int to enum conversion

like image 583
Michael Prewecki Avatar asked Sep 23 '09 12:09

Michael Prewecki


1 Answers

This should work as expected - just cast to the base type.

item.SomeNullableInteger == (Int32)SomeEnum.First

UPDATE

The best and cleanest solution is probably to update your DBML file.

  1. Open the DBML file in the designer.
  2. Select the enumeration type property of the entity.
  3. Open the properties window.
  4. Change the field Type of the selected property from System.Int32 to something like global::SomeNamespace.SomeEnum. Maybe it will work without the global qualifier, but I am not sure.

Now, if the code is regenerated, the property will be of the enumeration type instead of a integer. If you have nullable properties, you must of course use a nullable enumeration type.

like image 198
Daniel Brückner Avatar answered Oct 03 '22 23:10

Daniel Brückner