你提到要「標識外鍵存在於表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);
不清楚的問題 –
你在用什麼? LINQ to SQL?實體框架? –
使用LINQ to SQL .... – srid99