7

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

Community
  • 1
  • 1
Michael Prewecki
  • 2,064
  • 4
  • 16
  • 28

5 Answers5

14

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.

Daniel Brückner
  • 59,031
  • 16
  • 99
  • 143
  • That's exactly what I was looking for...this also allows me to use the item.SomeNullableInteger (which is of course no longer an integer but the DB type is an integer) in switch statements. I did look at the the DBML definitions and though about changing the type...but because the enum wasn't in the drop down I didn't change it :-), I'm clearly a library user not a library writer. – Michael Prewecki Sep 23 '09 at 15:22
4

According to the official documentation, you could cast your enum as an int to compare.

if (item.SomeNullableInteger == (int)SomeEnum.First)

http://msdn.microsoft.com/en-us/library/sbbt4032.aspx

For code clarity, it might be helpful to declare your enum as

enum SomeEnum
{
   First = 1;
   Second = 2;
}
David
  • 72,686
  • 18
  • 132
  • 173
3

Casting the enum to an int should do the trick.

Michael A. McCloskey
  • 2,391
  • 16
  • 19
2

You could cast the Enum to int:

if (item.SomeNullableInteger == (int)SomeEnum.First)
{
     // Do something...
}
bruno conde
  • 47,767
  • 15
  • 98
  • 117
2

to have

item.SomeNullableInteger == SomeEnum.First

to work:

  • be aware that First = 0 & Second = 1 (following the declaration of that enum)
  • SomeNullableInteger is of type int
  • And of course, SomeNullableInteger = 0 means First for you & SomeNullableInteger = 1 means second.
manji
  • 47,442
  • 5
  • 96
  • 103