你提到要“标识外键存在于表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