在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>
答案 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的关系,这可能是你所拥有的问题。