2015-06-04 56 views
0

我有一個名爲CategoryProducts與2個字段(CategoryId,ProductId)的連接表。我試圖找出正確的方法來獲取某個類別中的所有產品對象。內部連接與聯接表來檢索linq中的所有CategoryProducts

以下是我有:

// get list of all of the products in a category 
public static IEnumerable<Product> GetList(int categoryId) 
{ 
    using (var context = new AppContext()) 
    { 
     var pList= (from p in context.Products 
         join cp in context.CategoryProducts on categoryId equals cp.CategoryId 
         select p).ToList(); 

     return pList; 
    } 
} 

回答

3

試試這個:

var pList= (from p in context.Products 
       join cp in context.CategoryProducts on p.Id equals cp.ProductId 
       where cp.CategoryId==categoryId 
       select p).ToList(); 

你需要使用在每個源共享,可以爲比較相等一些價值加入。通常情況下,Linq to Entities基於表之間的邏輯關係。例如,在你的情況下,我認爲你在ProductsCategoryProducts之間有一對多的關係。加入的正確方法是使用Product的PK和CategoryProduct上的關係的FK。

另外,如果你CategoryProduct實體有這樣的結構:如果你有這些實體之間的關係,那麼你可以選擇Categories,包括Products

var query= context.CategoryProducts.Where(cp=>cp.CategoryId==categoryId).Select(cp=>cp.Product); 
+1

@默認,你是正確的t,我修復了這部分 – octavioccl

0

public class CategoryProduct 
{ 
    public int ProductId{get;set;} 

    public int CategoryId{get;set;} 

    public virtual Category Category{get;set;} 

    public virtual Product Product{get;set;} 
} 

你可以這樣做:

var result = context.CategoryProducts. 
      Where(c=>c.CategoryId == categoryId).Include(c => c.Products).ToList(); 
+0

對不起,我忘了提及我沒有使用導航屬性,因爲關係沒有在我接管的db中設置。 – JTunney

+0

@JTunney,沒有外鍵的產品和產品類別。酷 –

+0

我正在處理一個搞砸的數據庫。沒有關係設置。 – JTunney