「テーブルUに存在する外部キーを特定したい」と述べています。リフレクションと何らかの慣習を介してそれを行うことができるかもしれませんが、それは脆弱な解決策のようです. デリゲートを介して主キーと外部キーの関係を提供することをお勧めします。
基本的に、結合はデリゲートを使用して主キーと外部キーを取得し、LINQ プロバイダーはそれを結合句に変換します。結合の両側の署名は基本的に同じです。あなたの例では、Expression<Func<T, TKey>>
とExpression<Func<U, TKey>>
. キー タイプは、結合の両側で同じでなければならないことに注意してください。
このメソッドを呼び出すために使用するものは何でも、これらのデリゲートを渡す必要があります。次のようになります。
public class Query
{
public IEnumerable<T> GetData<T, U, TKey>(Expression<Func<T, TKey>> tKey, Expression<Func<U, TKey>> uKey)
{
Context context = new Context();
// using the extension method as the query expression had trouble figuring out the types
var data = context.GetTable<T>().Join(context.GetTable<U>(), tKey, uKey, (tblT, tblU) => tblT);
return data;
}
}
それを呼び出すと、次のようになります。
var data = query.GetData<Person, Order, int>(person => person.Id, order => order.Orderer.Id);