这可能是一件非常容易的事,但我找不到办法。
我正在尝试返回DepartmentID为1且DirectorID为2的视图。 DepartmentID位于Employee类中,DirectorID位于Director类中。
public class Employee
{
public int EmployeeID { get; set; }
public string Name { get; set; }
}
public class Director
{
public int DirectorID { get; set; }
public string Name { get; set; }
}
这是我的ActionResult,但这不符合我的要求。我需要在我的where声明中包含DirectorID。我应该使用&&?
public ActionResult Index()
{
return View(db.Employee.Where(x => x.DepartmentID == 1));
}
答案 0 :(得分:1)
有很多方法可以解决这个问题,但这些方法是否合适取决于这些实体之间的关系或缺乏关系,而这些实体尚未披露。
首先,让我们来看一个实际关系的基本例子。假设你有类似的东西:
public class Employee
{
public int EmployeeID { get; set; }
public string Name { get; set; }
public int DirectorId { get; set; }
public virtual Director Director { get; set; }
}
换句话说,在Employee
和Director
之间存在一对多,其中员工有一名董事,一名董事有很多员工,然后在您的行动中,您可以执行以下操作:
db.Employees.Where(x => x.DepartmentID == 1 && x.DirectorId == 2).Include("Director");
这将为您提供一份员工列表,每个员工都可以通过Director
上的Director
媒体访问Employee
个实例。然后,您可以在视图中随意使用每个Employee
实例的Director
实例或Employee
实例。
如果不是直接关系,则需要单独查询每个关系并将它们组合在视图模型中。例如:
public class EmployeesDirectorViewModel
{
public List<Employee> Employees { get; set; }
public Director Director { get; set; }
}
然后在你的行动中:
var employees = db.Employee.Where(x => x.DepartmentID == 1);
var director = db.Directors.Where(x => x.DirectorID == 2);
var model = new EmployeesDirectorViewModel
{
Employees = employees,
Director = director
}
return View(model);
但是,应该注意的是,由于我们假设此示例中没有直接关系,因此无法过滤员工所属的员工。
第三个选项是前一个选项的组合。即使您与员工和董事之间存在直接关系,您仍然可以使用视图模型来更好地组织数据。视图模型的目标是针对视图需要优化数据,因此您可以包含属性的子集,不包含实体的附加属性,计算和聚合等。
最后,可能存在关系,而不是直接关系。例如,您可能有类似的内容:
public class Employee
{
...
public int DepartmentID { get; set; }
public virtual Department Department { get; set; }
}
public class Department
{
...
public int DirectorID { get; set; }
public Director Director { get; set; }
}
您可以通过与我的第一个示例非常相似的方式处理此问题,您只需要在查询中遍历关系:
db.Employees.Where(x => x.DepartmentID == 1 && x.Department.DirectorId == 2)
.Include("Department.Director");
现在,这个例子是设计的,因为如果你按照id选择部门,那么在特定的导演中进一步调整它是没有意义的。导演要么是导演,要么不是。