2017-08-01 69 views
1

我在项目和团队之间存在多对多的关系。团队和员工也有很多关系。所以根据我的情况,只有团队可以分配给项目,而不是直接分配给员工。我正在尝试获取一个员工的项目。所以我通过首先获取员工团队以及这些团队的项目来实现这一目标。我这样做是这样的:检查重复条目的不同递归列表

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> 
    } 
} 

对此我面临的问题是,如果一个项目被分配给多个团队和一个员工是那些更多然后一个团队的一部分。同一个项目打印出不止一次。 我被困在这个地方,我如何删除重复项目的项目,但我需要显示所有分配到该项目的团队。有没有更好的方式来完成相同的情况,或者请建议我在我的代码中做一些调整来实现这一点。谢谢。

回答

2

你正在寻找的东西,如var projects= x.Select(item => item.Projects).Distinct()SelectMany()

employeeProfileViewModel.Projects = employee.Teams 
    .SelectMany(team => team.Projects) 
    .Distinct(); 

的问题是,它会尝试不同的一个“的项目列表的列表”,而不是一个“项目清单”。 SelectMany将列表清单列为单个列表,可以区分。

+0

谢谢。我真的很愚蠢。我没有想过这么简单的事情。但再次感谢。 – Muhammad

0

是的。随着LINQ,它是那么容易,因为

employeeProfileViewModel.Projects = projects.Distinct(); 
+0

好吧,让我检查 – Muhammad

+0

它没有奏效。仍然是同一个问题 – Muhammad