2012-12-22 73 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);