项目和团队之间有很多关系。团队和员工也有很多关系。因此,根据我的情况,只有团队可以分配给项目,而不是直接分配给员工。我正在尝试获取一个员工的项目。所以我这样做是先获取员工团队,然后是那些团队的项目。我是这样做的:
var employee = _employeeService.GetById((int)id);
employeeProfileViewModel = Mapper.Map<Employee, EmployeeProfileViewModel>(employee);
employeeProfileViewModel.Projects= employee.Teams.Select(t => t.Projects.ToList());
var x = employee.Teams.ToList();
var projects= x.Select(item => item.Projects).ToList();
employeeProfileViewModel.Projects = projects;
所以我得到一个列表,其中包含更多列表项目。 我以这种方式在我看来填充这个。
foreach (var item in Model.Projects)
{
foreach (var project in item)
{
<div class="list-item">
<div class="projectId" value="@project.Id" hidden>@ViewBag.EmployeeId</div>
<div class="list-text-name">
<h4 class="list-text">Project Name: @project.Name</h4>
</div>
<div class="container">
<div class="list-text-name col-md-4 left">
Teams Assigned: @project.Teams.Count;
@foreach (var team in project.Teams)
{
<p>@team.Name</p>
}
</div>
<div class="col-md-5 left">
<div>
Start Date: @project.StartDate
</div>
<div>
End Date: @project.EndDate
</div>
</div>
</div>
<div class="list-controls">
<a class="widget-icon widget-icon-circle ViewProject"><span class="icon-upload-alt" title="submit task"></span></a>
<a href="#" class="widget-icon widget-icon-circle"><span class="icon-pushpin"></span></a>
<a href="#" class="widget-icon widget-icon-circle"><span class="icon-remove"></span></a>
</div>
</div>
}
}
我面临的问题是,如果一个项目被分配给多个团队,并且同一个员工是那些多于一个团队的一部分。同一个项目打印不止一次。 我被困在这个地方,我如何删除重复的项目条目,但我需要显示分配给该项目的所有团队。有没有更好的方法来完成相同的方案或请建议我在我的代码中进行一些调整来实现这一目标。感谢。
答案 0 :(得分:2)
您正在寻找SelectMany()
employeeProfileViewModel.Projects = employee.Teams
.SelectMany(team => team.Projects)
.Distinct();
var projects= x.Select(item => item.Projects).Distinct()
之类的问题在于它试图区分项目列表&#34;列表。而是一个&#34;项目列表&#34;。 SelectMany将列表列表展平为单个列表,可以区分..
答案 1 :(得分:0)
是的。使用LINQ,它就像
一样简单employeeProfileViewModel.Projects = projects.Distinct();