ASP.NET MVC3& LINQ选择使用映射表

时间:2012-05-28 11:53:30

标签: c# asp.net-mvc-3 linq

在SQL上我有3个表:组织(id,名称)类别(id,名称)目录(org_id,cat_id) - 组织和类别之间的映射表。 ADO.NET DbContext Generator为我创建了2个类:

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>

1 个答案:

答案 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();

将查询转换为结果的枚举,这样就可以满足模型的要求。

EDIT 在第二次看,似乎你的模型不是1:M的关系,这可能是你所拥有的问题。