У меня есть этот существующий 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>(); }
}
Есть ли способ решить это или лучший способ сделать это? ТИА