我的目标是应用模式策略。为此,我“爆炸”了我的班级,在那里我提出了所有数据库请求并使用这些调用
new DBRequest1().Exec();
new DbRequest2(id).Exec();
DBRequest 类看起来像这样:
interface IDBRequest
{
TR Exec<TR, TD>() where TR : IEnumerable<TD>, IQueryable<TD>;
}
class DBRequest1 : IDBRequestDB
{
public DBRequest1(){ } //constructor
public TR Exec<TR, TD>() where TR : IEnumerable<TD>, IQueryable<TD> {
return Enumerable.Empty<Models.Table1Element>();
}
}
class DBRequest2 : IDBRequestDB
{
private int Id{get;set;}
public DBRequest2(in id){ Id = id; } //constructor
public TR Exec<TR, TD>() where TR : IEnumerable<TD>, IQueryable<TD> {
return MY_DATABASE.Table2.Where(r=>r.id == Id);
}
}
显然这不起作用。我可以使用
IEnumerable<object> Exec();
并将所有元素转换为对象,但使用起来非常混乱......我应该如何设置方法签名/主体以允许 Exec() 返回一个 IEnumerable、IQueryable,其中 TD 仅由 linQ 结果决定?只有可能吗?