我正在寻求有关如何更好地设计以下 LINQ 查询(使用 WCF 数据服务)的建议。要求是通过组合框显示员工列表。
DB表结构如下:
一个员工可以分配到多个项目,一个项目可以有多个员工。这种关系是通过 3 个表设计的:[Employees] 1--* [EmployeeProjects] *--1 [Projects]
. 在 dot country 中,就像我正在遍历对象树一样:Employee.EmployeeProjects.Project
.
以下 LINQ 语句返回一个列表EmployeeProjects
,但我所追求的是属于这些特定项目的一部分的 Employee 列表。理想情况下,执行 . 是有意义的,但由于链接(很多)IQueryable<Employee>
,我不知道如何构造我的 LINQ 语句。EmployeeProjects
你看到我的困境了吗?
我执行一个IQueryable<EmployeeProject>
因为,正如您从下面的 LINQ 语句中看到的那样,我不必处理“许多”方面,因为 Employee 和 Project 双方都是 1 关系。在获得 的列表后EmployeeProjects
,我对其执行另一条.Select()
语句以返回我最终想要的内容,即唯一员工姓名的列表,例如.Select(results => results.Employee.Name).Distinct()
。
private IQueryable<EmployeeProject> GetEmployeeProjects()
{
var employeeProjects = service
.CustomQuery<EmployeeProject>()
.Where(et => ep.Project.Name == "TrackerX 43" ||
ep.Project.Name == "AccountingX 11" ||
ep.Project.Name == "TopX 2" ||
ep.Project.Name == "SiteX 32" ||
ep.Project.Name == "BuildingX 3" ||
ep.Project.Name == "ReportX 321" ||
ep.Project.Name == "PrototypeX 78" ||
ep.Project.Name == ... more ...)
.OrderBy(ep => ep.Employee.Name)
.Select(ep => new EmployeeProject
{
Id = ep.Id
Project = new Project
{
Name = ep.Project.Name
},
Employee = new Employee
{
Id = ep.Employee.Id,
Name = ep.Employeet.Name
}
});
return employeeProjects;
}
任何有关设计更好的建议将不胜感激。