Как я могу использовать свое перечисление в запросе LinqToSQL? - PullRequest
2 голосов
/ 17 июня 2009

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

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

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

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?

Ответы [ 2 ]

7 голосов
/ 17 июня 2009

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

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

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

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

0 голосов
/ 17 июня 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...