У меня есть класс LINQ to SQL под названием Data со столбцом типа Data.Linq.Binary. Я хочу создать класс-оболочку, который извлекает реальный объект из поля Binary. У меня есть несколько классов, которые хранят информацию в таблице данных. Я знаю по контексту, что и в каждом классе, где хранится информация в таблице данных, ВСЕГДА хранится один и тот же тип. У меня есть класс Something
с методом, который добавляет / читает string
в / из таблицы данных.
class Data // LINQ to SQL generated
{
System.Data.Linq.Binary Value {get; set;}
string Name {get; set;}
int ID {get; set;}
}
class Something
{
void Add(string s)
{
//using (db)
Data.Value = s.ToBinary(); //Convert the string to a byte[] then to Binary
}
}
Затем я хочу свойство, которое читает из двоичного столбца:
class Something
{
string Value
{
//using (db)
get{ return Data.Value.ToString();//Convert to byte[] then to string }
}
}
Само по себе это прекрасно работает, но у меня есть несколько классов, которые выполняют такое же взаимодействие. Естественно, я хочу интерфейс или абстрактный класс, что-то вроде этого:
interface Binary<T>
{
void Add(T t);
T Value {get;}
}
Вот моя проблема: в получателе значения у меня есть запрос linq, который фактически возвращает класс данных LinqToSql с Linq.Binary Value
, но в моем интерфейсе у меня есть T Value
. Как привести запрос linq к этому двоичному интерфейсу? Примерно так, хотя и не работает:
List<Binary<T>> Value
{
get
{
return (from D in db.Data
select D).Cast<Binary<T>>();
}
}
Редактировать: у меня было неправильное свойство в самом конце. Это должно быть значение, а не имя.