ここでの私の目的は、パターン戦略を適用することです。そのために、すべてのデータベース要求を行い、それらの呼び出しを使用するクラスを「展開」します。
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 を返すことができるようにするには、メソッドのシグネチャ/ボディをどのように設定すればよいですか? それは可能ですか?