【发布时间】:2015-06-03 04:13:03
【问题描述】:
我有两个实体:一个员工实体和一个办公室实体。这两个实体之间存在一对多的关系——也就是说,一个办公室可能有很多员工,但每个员工只有一个办公室。
我正在使用 Entity Framework 6 来处理一个项目。我目前正在使用this tutorial 来学习如何使用实体框架创建一个简单的 Web 应用程序。我已经稍微修改了代码来玩弄我自己的实体。
现在我正在尝试让我的应用程序的“关于”页面显示每个办公室的员工人数。换句话说,我正在尝试创建一个双列表,其中第一列包含办公室的所有位置,第二列包含每个位置的相应员工人数。我相信这意味着我必须从每个数据库(表?)中提取数据,但是我不知道如何获取每个办公室的员工人数。获得总数很容易。我可以写以下查询:
NumOfEmployees = locationGroup.Count()
其中 locationGroup 是对来自两个实体的数据进行分组的变量,而 NumOfEmployees 是 LocationGroup 类的公共 int。这是我目前使用的代码块(大部分来自教程——我已经评论了我添加的部分)。
public ActionResult About()
{
IQueryable<LocationGroup> data = from employee in db.Employees
group employee by employee.FirstName into locationGroup
//added the second pull of data from the other db
from office in db.Offices
group office by office.Location into locationGroup
select new LocationGroup()
{
Location = locationGroup.Key,
NumOfEmployees = locationGroup.Count() //modified this from original
};
return View(data.ToList());
}
从代码中可以看出,
NumOfEmployees = locationGroup.Count()
没有做我想让它做的事情。我希望它返回每个办公地点的员工人数,但它只返回员工总数并为每个办公地点写入。在我的 Employee.cs 类中,Employee 实体有一个可以引用的 OfficeID:
public class Employee
{
public int EmployeeID { get; set; }
public int OfficeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int PhoneNum { get; set; }
public DateTime DoB { get; set; }
public DateTime HireDate { get; set; }
public string JobTitle { get; set; }
public int Salary { get; set; }
public virtual Office Office { get; set; }
}
所以我试图访问该 OfficeID 并使用条件语句,因此它只计算具有相应 OfficeID 的员工。我环顾四周寻找解决方案,但不知道是否可以使用特定的聚合查询在一行中执行此操作,或者是否需要创建一个循环来计算每个办公室的员工人数。问题是我不知道访问每个办公室拥有的每个员工人数的语法。我什至不知道如何在 select 子句中访问办公室 + 员工的属性
select new AddressGroup()
在上面的 About() 方法中,我也不需要。对上述 About() 方法的任何帮助将不胜感激。
编辑:我在下面添加了 Office 类:
public class Office
{
public int ID { get; set; }
public string Location { get; set; }
public string BusinessName { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
【问题讨论】:
-
你能把
Office类文件贴出来吗?Office上是否有Employee的导航集合? -
Office上没有Employees集合吗?你不能在那个收藏上打电话给.Count()吗? -
您好,抱歉,这是我第一次在 Stack Overflow 上发帖。如果您是这个意思,我已经在我的原始帖子中添加了 Office 类文件。
标签: c# asp.net-mvc linq entity-framework entity