2012-12-22 53 views
-1

我想写LINQ连接查询在泛型中,但在识别外键时遇到困难。 PFB代码。LINQ加入使用泛型

我想找出表U中的外键现在,我可以用它来比较operation.Thanks

var _tab = (from tblT in context.GetTable<T>() 
      join tblU in context.GetTable<U>() 
      on pk equals fk 
      select tblT).GetEnumerator(); 
+8

不清楚的问题 –

+0

你在用什么? LINQ to SQL?实体框架? –

+0

使用LINQ to SQL .... – srid99

回答

1

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