テンプレート T に基づいて読み込まれるデータベースがあります。ただし、文字列に基づいて、または「T2」テンプレートを渡すことで、他のテーブルを結合したいと考えています。
このような関数を作成して IQueryable を生成するにはどうすればよいですか?
public void createJoinedTable<T, T2>(T2 join_table, string join_on_this_property, string order, string order_by)
where T : class
where T2 : class
{
var table = GetGenericTable<T>(); // I have the IQueryable<T> of the main table.
// now join the joined table.
var id = 1;
table = table // your starting point - table in the "from" statement
.Join(join_table, // the source table of the inner join
firsttable => post.myid, // Select the primary key (the first part of the "on" clause in an sql "join" statement)
secondtable => meta.othertableid, // Select the foreign key (the second part of the "on" clause)
(firsttable, secondtable) => new { Unknown = firsttable , Unknown2 = secondtable}) // selection
.Where(x => x.Unknown.ID == id); // where statement
table = table.CustomOrderByDescending(order_by, direction); // custom ordering by string
m_queryable = table; // record results.
}
問題は、Entity クラスによって制約されていないため、.Join() を実行できないことです。一般的な「クラス」として制約されます。
どこ T : クラスの代わりに T: MyEntityTable
さて、引数でそれを行った場合、「汎用結合テーブル関数」を使用する意味は何ですか?
テキストベースの引数に基づいて、好きなものに参加できるようにしたい.
これを達成するには、「join_on_this_property」をどのように使用すればよいですか?
ボーナス チャレンジ: 「List tables, List join_ON_properties」に基づいて無制限にテーブルを結合しますが、これは非常に複雑になる可能性があります。