У меня есть поле в моей таблице базы данных, которое используется для хранения значения перечисления, например:
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?
Проверьте эту ссылку:
http://dotnet.org.za/hiltong/archive/2008/08/06/using-enums-with-linq-to-sql.aspx
Как звенья умирают - и, по крайней мере, для меня это умерло - вот важная часть:
[При добавлении столбца к сущности] по умолчанию тип будет отображаться как "int (System.Int32)", но вы можете изменить его на полностью определенный тип перечисления (в моем случае, ConsoleApplication1.CustomerType). НО, чтобы найти его полностью, вам нужно добавить глобальный идентификатор, как показано ниже: global:: ConsoleApplication1.CustomerType, поэтому введите в текстовое поле (как эквивалент для вашего пространства имен)
У вас нет компилятора, но я думаю, что если вы перечислите свой enum в int, он будет работать. Поэтому попробуйте:
var q = MyDataContext.GetTable(). Где (t = > t.MyStatus == (int) TStatus.Active);