Класс-оболочка LINQ вокруг двоичного DataType - PullRequest
0 голосов
/ 03 апреля 2011

У меня есть класс 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>>();
   }
}

Редактировать: у меня было неправильное свойство в самом конце. Это должно быть значение, а не имя.

1 Ответ

0 голосов
/ 03 апреля 2011

Если вы не хотите, чтобы ваш класс Data был сам по себе универсальным, он должен реализовать Binary<T> для определенного T, то есть string, поэтому объявление класса выглядит так:

class MyDataWrapper : Binary<string> 
{
   ...

В этом случае реализация Name выглядит примерно так:

List<Binary<string>> Name
{
   get
   {
        return (from D in db.Data
                select D).Cast<Binary<string>>();
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...