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);