Как я могу использовать свое перечисление в запросе LinqToSQL?

2

У меня есть поле в моей таблице базы данных, которое используется для хранения значения перечисления, например:

create table MyTable (
  ...
  Status tinyint not null,
  ...
)

и в моем классе С# у меня есть

public enum TStatus : byte {
  Pending = 1      
  Active = 2,
  Inactive = 3,
}

public TStatus MyStatus {
  get { return (TStatus)Status; }
  set { Status = (byte)value; }
}

теперь я хочу написать запрос Linq, который использует свойство MyStatus MyTable, например.

var q = MyDataContext.GetTable<MyTable>().Where(t => t.MyStatus == TStatus.Active);

но, конечно, Linq не знает, как интерпретировать MyStatus как SQL. Что мне нужно сделать для MyStatus, чтобы он работал в LinqToSQL?

Теги:
linq
enums
linq-to-sql

2 ответа

7
Лучший ответ

Проверьте эту ссылку:

http://dotnet.org.za/hiltong/archive/2008/08/06/using-enums-with-linq-to-sql.aspx

Как звенья умирают - и, по крайней мере, для меня это умерло - вот важная часть:

[При добавлении столбца к сущности] по умолчанию тип будет отображаться как "int (System.Int32)", но вы можете изменить его на полностью определенный тип перечисления (в моем случае, ConsoleApplication1.CustomerType). НО, чтобы найти его полностью, вам нужно добавить глобальный идентификатор, как показано ниже: global:: ConsoleApplication1.CustomerType, поэтому введите в текстовое поле (как эквивалент для вашего пространства имен)

  • 1
    +1 - превосходит мою идею
  • 0
    Один и тот же пост я был в несколько раз (каждый раз, когда я забыл, как это сделать). Также я впервые увидел глобальный квалификатор на работе.
Показать ещё 1 комментарий
0

У вас нет компилятора, но я думаю, что если вы перечислите свой enum в int, он будет работать. Поэтому попробуйте:

var q = MyDataContext.GetTable(). Где (t = > t.MyStatus == (int) TStatus.Active);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню