在foreach / LINQ中复制模型

时间:2018-11-28 16:14:01

标签: c# linq

我正在运行以下foreach循环:

     @model IList<Employees>
@{ 
    var emp1 = Model.GroupJoin(Model,
                   d => d.DeptId, e => e.Dept.DeptId,
                   (e, d) => new { Emps = e, Dept = d });
}

@foreach (var item in emp1)
{
    <div class="section">
        <h5>@item.Emps.Dept.DeptName</h5>
        <div class="members">

            <ul class="list-unstyled">
                @{ 
                    var dept1 = item.Dept.OrderByDescending(x => x.ManagerFlag == true);
                }
                @foreach (var dept in dept1)
                {
                   <li class="@(dept.ManagerFlag == true ? "media dotted" : "media")">

                        <img class="mr-3" src="~/images//icons/image.png" alt="">
                        <div class="media-body d-flex">
                            <div class="text" id="liText">

                                <h5 class="mt-0 mb-1"> @dept.Firstname @dept.Lastname</h5>
                                <p>@dept.Title (<span class="loc">@dept.Location.LocationCode</span>)</p>
                            </div>
                        </div>
                        <div class="links">
                            <a href="mailto:@dept.Email">
                                <img src="~/images/icons/envelope.png" alt="">
                            </a>
                            <a href="https://www.slack.com">
                                <img src="~/images/icons/slack.png" alt="">
                            </a>
                            <a href="#" class="btn archiveButton" data-toggle="modal" data-target="#archivePerson">
                                Archive
                            </a>
                        </div>
                    </li>
                }
            </ul>
        </div>
    </div>
}

但是由于某些原因,相同的“ Dept_Names”与第二条foreach语句会多次显示。为什么会这样呢? 即Emp1显示多个相同的dept_names enter image description here

谢谢

1 个答案:

答案 0 :(得分:2)

这是一个控制台应用程序,可以满足您的需求……您的GroupJoin导致了重复。看看这是否有助于您朝正确的方向前进。

class Program
    {
        static void Main(string[] args)
        {
            List<Department> deps = new List<Department>();
            Department finanace = new Department { Id = 1, Name = "Finance & Accounting" };
            deps.Add(finanace);
            Department hr = new Department { Id = 2, Name = "People - HR" };
            deps.Add(hr);

            List<Employee> emps = new List<Employee>();
            emps.Add(new Employee { Id = 1, Name = "Finance Person 1", Department = finanace });
            emps.Add(new Employee { Id = 2, Name = "Finance Person 2", Department = finanace });
            emps.Add(new Employee { Id = 3, Name = "HR Person 1", Department = hr });
            emps.Add(new Employee { Id = 4, Name = "HR Person 2", Department = hr });


            var grouped =
                deps.GroupJoin(emps,
                   dept => dept,
                   emp => emp.Department,
                   (dept, employeeList) =>
                   new
                   {
                       DepartmentName = dept.Name,
                       Employees = employeeList.Select(employee => employee.Name)
                   });


            foreach (var dept in grouped)
            {
                Console.WriteLine(dept.DepartmentName);

                foreach (var emp in dept.Employees)
                {
                    Console.WriteLine(emp);
                }

                Console.WriteLine();
            }

            Console.ReadLine();
        }
    }


    public class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int DepartmentId { get; set; }
        public Department Department { get; set; }
    }


    public class Department
    {
        public int Id { get; set; }
        public string Name { get; set; }

    }