LINQ包装类围绕二进制DataType

时间:2011-04-03 17:09:18

标签: c# .net linq linq-to-sql generics

我有一个名为Data的LINQ to SQL类,其类型为Data.Linq.Binary。我想创建一个包装类,从二进制字段中提取实际对象。我有多个类在Data表中存储信息。我知道通过上下文,因为在每个类中存储信息在数据表中ALWAYS存储相同的类型。我有一个类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;}
}

这是我的问题:在Value getter中我有一个linq查询实际上返回带有Linq.Binary Value的LinqToSql Data类,但在我的界面中我有一个T Value。如何将linq查询转换为此二进制接口?像这样的东西,虽然它不起作用:

List<Binary<T>> Value
{
   get
   {
        return (from D in db.Data
                select D).Cast<Binary<T>>();
   }
}

编辑:最后我的错误属性。它应该是价值,而不是名称。

1 个答案:

答案 0 :(得分:0)

除非您希望自己的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>>();
   }
}