2012-05-28 68 views
0

在SQL我有3個表:組織(ID,姓名)類別(ID,姓名)目錄(org_id,CAT_ID) - 之間的映射表組織和類別。 ADO.NET的DbContext發生器我創建2類:MVC3和LINQ選擇映射表

public partial class Organization 
{ 
    public Organization() 
    {    
     this.Category = new HashSet<Category>(); 
    } 

    public int id { get; set; } 
    public string name { get; set; }  

    public virtual ICollection<Category> Category { get; set; } 
} 

public partial class Category 
{ 
    public Category() 
    { 
     this.Organization = new HashSet<Organization>(); 
    } 

    public int id { get; set; } 
    public string name { get; set; }  

    public virtual ICollection<Organization> Organization { get; set; } 
} 

如何我可以選擇映射到使用LINQ CAT_ID = 1所有組織? 就像我使用T-SQL它:

SELECT * 
FROM Organization o 
INNER JOIN Catalog ct ON o.id = ct.org_id 
INNER JOIN Category cg ON ct.cat_id = cg.id 
WHERE cg.id = 1 

我試圖

var model = _db.Category 
      .Where(c => c.id == 1) 
      .Select(c => c.Organization); 

但是我有鑑於這樣定義

@model IEnumerable<Project1.Models.Organization> 
+0

我找不到您的問題。在輸入視圖時遇到問題意味着什麼?請向我們提供有關您的確切問題的更多詳細信息 –

+0

這是錯誤:「傳入字典的模型項類型爲'System.Data.Entity.Infrastructure.DbQuery'1 [System.Collections.Generic.ICollection'1 [Project1。 Models.Organization]]',但是這個字典需要一個'System.Collections.Generic.IEnumerable'1 [Project1.Models.Organization]'類型的模型項。 – dkrzh

+0

從這個錯誤請看我的答案。我相信你的模型是不正確的。 –

回答

0

從你的代碼中有我只能類型的煩惱假定你沒有從查詢創建一個Enumerable。您的代碼:

var model = _db.Category.Where(c => c.id == 1).Select(c => c.Organization); 

由於您的模型已定義,因此不是可枚舉的。請嘗試:

var model = _db.Category.Single(c => c.id == 1).Organizations.ToList(); 

將查詢轉換爲結果的枚舉,然後滿足您的模型的要求。

編輯 第二種看起來,看起來您的模型不是1:M的關係,這可能是您遇到的問題。

+0

工作正常,謝謝! – dkrzh

+0

考慮將我的答案標記爲已接受。 –

+0

我的答案旁邊有個打勾,點擊它。 –