C# 实体框架,选择多对多
我首先使用实体框架代码 我有以下表格:C# 实体框架,选择多对多,c#,entity-framework,select,many-to-many,C#,Entity Framework,Select,Many To Many,我首先使用实体框架代码 我有以下表格: Companies : PK ID int, Name, ... Customers : PK ID int, Name, ... CustomersCompanies : CustomerID, CompanyID 我可以创建没有问题的客户和公司。 但我不知道如何获得客户拥有的所有公司 我试过: _customer = ... var companies = from c in _db.Companies
Companies : PK ID int, Name, ...
Customers : PK ID int, Name, ...
CustomersCompanies : CustomerID, CompanyID
我可以创建没有问题的客户和公司。
但我不知道如何获得客户拥有的所有公司
我试过:
_customer = ...
var companies = from c in _db.Companies
where c.Customers.Contains(_customer)
select c;
但公司不包含任何内容…对于正确创建的实体,您应该能够调用:
var companies = _customer.Companies;
您必须在Customer
类中拥有ICollection
,在Company
类中拥有ICollection
查看本教程:。如果您先使用代码,则只需将虚拟公司集合添加到Customer类,并将虚拟客户集合添加到Company类:
public class Customer
{
public int Id { get; set; }
public virtual ICollection<Company> Companies { get; set; }
}
public class Company
{
public int Id { get; set; }
public virtual ICollection<Customer> Customers { get; set; }
}
我不确定您的_db类是什么样子的,所以我不知道您是否只是将实体集合作为其属性。通常我使用实体框架DbContext,它有一个GetDbSet方法。所以我会做一些类似的事情:
var customers = _dbContext.GetDbSet<Customer>().Include(x => x.Companies);
var customers=\u dbContext.GetDbSet().Include(x=>x.companys);
希望有帮助 尝试按客户ID进行比较,如:
_customer = ...
var companies = from c in _db.Companies
where c.Customers.Where(x => x.CustomerID == c.CompanyID)
select c;
或更短:
var comapnies = _db.Companies.Select(x => x.CustomerID == c.CompanyID);
您没有
i收集公司{get;set;}
关闭Customer
模型吗?EF使获得这些信息变得容易。
var comapnies = _db.Companies.Select(x => x.CustomerID == c.CompanyID);