2017-08-01 74 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