Вы можете использовать перечисления непосредственно в LINQ-to-SQL (но не в Entity Framework); просто измените тип свойства (в dbml / designer) на полностью определенный тип enum, и он выполнит приведение за вас. Конечно, вы можете назвать его AchievementType - и это предполагает прямой (приведенный) перевод.
Если это не соответствует вашему сценарию, вам, вероятно, придется выбрать его как целое число, а затем выполнить окончательное приведение в LINQ-to-Objects (через AsEnumerable ()). Вы также можете попробовать прямое приведение (при условии, что этого достаточно) вместо обычного метода расширения:
select new {..., AchievementType = (AchievementType) foo.Bar, ...}
Не то чтобы тип Models.Achievement
был определен в dbml, вы не можете создать его таким образом - вам нужно просто выбрать его. Но если это не является частью db-модели, тогда это нормально. Здесь является связанным примером для отображения строк в перечислениях в LINQ-to-SQL.
Если ни один из этих способов не подходит, другой подход заключается в объявлении свойства enum как прокладки в частичном классе. Я привел пример этого здесь (для EF, но он работает так же), но учтите, что если вы сделаете это, вы не сможете использовать свойство enum в предложениях Where
и т. Д., Так как не отображается в модели.