Linq to sql 3 linq到sql表,所有的设计都是一样的,如何将它们重构到干燥状态?

Linq to sql 3 linq到sql表,所有的设计都是一样的,如何将它们重构到干燥状态?,linq-to-sql,Linq To Sql,因此,通过一个简单的设计器更改,我可以使3个表实现相同的接口,而无需任何额外的编码,从这里可以使行作为接口类型的可查询对象,而无需将整个表下放到内存中并逐行转换吗 每个表都可以这样处理: [Table(Name="dbo.bLog")] public partial class bLog : IBlogRow 其中,接口为: public interface IBlogRow { String App{get;set;} String Version{get;set;} String Me

因此,通过一个简单的设计器更改,我可以使3个表实现相同的接口,而无需任何额外的编码,从这里可以使行作为接口类型的可查询对象,而无需将整个表下放到内存中并逐行转换吗

每个表都可以这样处理:

[Table(Name="dbo.bLog")]
public partial class bLog : IBlogRow
其中,接口为:

public interface IBlogRow
{
 String App{get;set;}
 String Version{get;set;}
String Message{get;set;}
DateTime dt{get;set;}
int? value {get;set;}
String ex {get;set;}
int? SecsTaken{get;set;}
bool? loanLevel{get;set;}
}


我认为这是一个反方差或协方差问题。我似乎无法将表转换为系统。linq.table也无法将其转换为IQueryable?我该如何使这项工作正常,以便为所有3个具有相同设计的表编写相同的查询代码,并交替使用它们?

您是否尝试过类似的方法

IEnumerable<IBlogRow> GetRows()
{
    DB db = new DB();
    return db.BlogRows.Where(row => row.App == "something").Cast<IBlogRow>();
}
IEnumerable GetRows()
{
DB=新的DB();
返回db.BlogRows.Where(row=>row.App==“something”).Cast();
}
我认为您必须在执行查询后进行强制转换,因为LINQtoSQL无法将IBlogRow属性映射到SQL表列

更新:

你也可以试试。您应该能够在这3个表之间重用大部分查询代码。这里的缺点是,您将放弃对魔术字符串的强类型查询


另一个选择是使用。看看泛型谓词示例。这看起来很像您所描述的。

这里的原始设计是,我编写的linq查询可以跨所有三个表工作,因此在查询后强制转换不会消除主要冗余。我对查询部分中的几乎每一列都进行了条件筛选。。。并且必须通过复制和粘贴为每个linq类复制该查询。+1通用谓词似乎可以解决这个问题,无论哪种方式,这两种资源都值得注意和关注。我一弄明白/测试就接受。这在Vb.net中似乎不起作用,因为它需要显式实现,我必须将代码放入生成的文件中。对于linq代码,我部分地通过了到C的转换,我认为这将是vb的一个主要陷阱。@Maslow,为了让PredicateBuilder工作,你必须转换到C吗?