Перечисленное значение приведено / преобразовано в Int32 c# - PullRequest
0 голосов
/ 24 марта 2020

У меня есть этот существующий Enum, который используется в разных классах, он выглядит примерно так:

 public Enum Enum1: byte
{
    [Description("Table 1")] tbl1= 0,
    [Description("Table 2")] tbl2= 1,
    [Description("Table 3")] tbl3= 2
}

Он отлично работает, когда используется в классах, которые сопоставляют свои свойства с базой данных. Проблема в том, что я делаю хранимую процедуру, которая содержит объединение из 3 таблиц, где я включил дополнительный столбец, значение которого запрашивается только для определения, из какой таблицы он получен. Пример запроса:

SELECT id AS ID, name AS Name, '0' AS Type
FROM tbl1
UNION
SELECT id AS ID, name AS Name, '1' AS Type
FROM tbl2
UNION
SELECT id AS ID, name AS Name, '2' AS Type
FROM tbl3

Таким образом, результаты будут:

ID | Name   | Type
1    Jose      0
1    Admins    1
1    Visitors  2

Тип столбца сопоставлен с Enum1. Поскольку в запросе я указал только значение Type, значением по умолчанию является int / Int32. Вот где я сталкиваюсь с System.InvalidCastException: 'Невозможно привести объект типа' System.Int32 'к типу' System.Byte '.' Я не могу изменить dataType моего Enum, поскольку он используется в других классах.

Я попытался преобразовать / преобразовать Type в Byte, но выдает еще одну ошибку. Фрагмент кода ниже

 public Enum1 Type { get { return Convert.ToByte(Type)}; set { Type = Convert.ToInt32(value)}; }
 [NotMapped]
 public string TypeName 
 {
   get { return Type.GetAttributeOfType<DescriptionAttribute>().Description; }
   private set { Type = value.ToEnum<RecipientType>(); }
 }

Есть ли способ решить это или лучший способ сделать это? ТИА

1 Ответ

0 голосов
/ 24 марта 2020

Извините за беспокойство и за расплывчатость. Я понял, как решить мою проблему. Итак, вот дальнейшее объяснение. У меня есть класс модели, который получает результат моего запроса со столбцами:

ID BIGINT
Name VARCHAR (250)
Type --> queried

Моя модель:

public class Model1 
{
  public int ID {get;set;}
  public string Name {get;set;}
  public Enum1 Type { get ; set ; }
  [NotMapped]
  public string TypeName 
  {
   get { return Type.GetAttributeOfType<DescriptionAttribute>().Description; }
   set { Type = value.ToEnum<RecipientType>(); }
  }    
}

И мой Enum1 был byte.

Моя основная проблема заключалась в том, как преобразовать столбец «Тип» из Int32 в Byte, который сопоставлен с моим Enum1, тип данных которого Byte. И добавление операции CAST в мой запрос к базе данных решило проблему.

SELECT id AS ID, name AS Name, CAST (0 AS TINYINT) AS Type
FROM tbl1
UNION
SELECT id AS ID, name AS Name, CAST (1 AS TINYINT) AS Type
FROM tbl2
UNION
SELECT id AS ID, name AS Name, CAST (2 AS TINYINT) AS Type
FROM tbl3

Сначала я пытаюсь преобразовать переданное значение 'Type' в моем классе, но решение проблемы в моем запросе к базе данных решило ее. Теперь мне не нужно конвертировать столбец Type в моем классе или мой Enum1 в Int32.

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