2016-01-29 14 views
1

我想使用linq連接2個表並避免匿名對象。如何使用linq連接2個表,但避免匿名對象

到目前爲止我使用元組。

var products = from tm in db.TargetMarkets 
       join tp in db.Products on tm.product_id equals tp.id 
       where tm.country == 2 
       select Tuple.Create<TargetMarket, Product>(tm, tp); 

但是,當我的foreach

foreach (var p in products) 
{ 
    var a = p.Item1.id; 
} 

它拋出一個異常

LINQ到實體無法識別方法「System.Tuple`2

問題

  1. 有沒有辦法讓我的代碼強類型
  2. 有什麼不對元組(可選)
+0

我懷疑是因爲類型使用連接條件錯誤,你能檢查兩個ID是同一類型? –

+0

您注意到'foreach'中的錯誤,因爲第一條語句是延遲執行。 –

+0

它們是相同的類型(整數)。查詢語句不會拋出錯誤。 foreach執行拋出錯誤。 – PJ3

回答

3

有沒有辦法讓我的代碼強力型

您可以定義一個新的類型,並創建該類型的對象而不是匿名對象。

class ProductTargetMarket 
{ 
    //Attributes 
} 

var ProductsTargetMarkets = from tm in db.TargetMarkets 
      join tp in db.Products on tm.product_id equals tp.id 
      where tm.country == 2 
      select new ProductTargetMarket{Attribute1OfProductTargetMarket = tp.Attribute1, Attribute1OfProductTargetMarket = tm.Attribute1 }; 

要創建一個元組,你可以先將其轉換爲匿名類型,然後將其轉換爲元組,看到這個thisthis崗位。

+1

謝謝。有用!。我只是想知道「linq查詢」的語法,首先返回匿名類型並將其轉換爲元組。 (可選&谷歌):) – PJ3