EF 6使用LINQ进行多对多数据检索

时间:2013-12-03 15:05:35

标签: c# linq linq-to-entities entity-framework-4.1 entity-framework-6

我有两个具有多对多关系的实体POCO实体,例如

public class Employee
{
    public int Id;
    public string Name;
    public virtual ICollection<Organization> Organizations {get;set;}
}

public class Organization
{
    public int Id;
    public string Name;
    public virtual ICollection<Employee> Employees {get;set;}
}

我想使用LINQ获取Employee.Name,Employee.Id,OrganizationID。 它会重复员工的数据,但我很乐意。我应该如何为此编写LINQ to EF。

2 个答案:

答案 0 :(得分:1)

var query = from e in context.Employee
            from o in e.Organizations
            select new
            {
              EmployeeName = e.Name,
              EmployeeId = e.Id,
              OrganizationId = o.Id
            }

答案 1 :(得分:0)

按照上面的结构,你应该在其中一个表中有外键。因此,不需要同时使用两个实体对象,只需使用其中一个的外键可用,并获得其他实体的Icollection对象。

如果员工拥有组织的外键,那么您可以执行以下操作:

var objEmp = context.Employee;

因此,您将获得objEmp中的整个Employee实体以及您希望使用组织实体的任何地方,您将获得Icollection of Organization,因为您通过以下方式拥有多对多的关系:

var objOrg = objEmp.Organisations;

您可以使用FirstOrDefault()或SingleOrDefault()方法使用lambda表达式检索上述查询中的第一个或一个记录。