Linq C#列表与条件不同
我偶然发现了一个场景,我必须将一个w.r.t分组到多个列中。我能解决它,但后来麻烦来了。仅当分组键满足条件时,才应将行分组 我介绍了一个示例场景,以显示不同项目的员工角色Linq C#列表与条件不同,linq,c#-4.0,Linq,C# 4.0,我偶然发现了一个场景,我必须将一个w.r.t分组到多个列中。我能解决它,但后来麻烦来了。仅当分组键满足条件时,才应将行分组 我介绍了一个示例场景,以显示不同项目的员工角色 public class EmployeeRoleDept { public int RoleId { get; set; } public string RoleName { get; set; } public int DeptartmentId { get; set; } public s
public class EmployeeRoleDept
{
public int RoleId { get; set; }
public string RoleName { get; set; }
public int DeptartmentId { get; set; }
public string DeptartmentName { get; set; }
public int ProjectId { get; set; }
public string ProjectName { get; set; }
}
var listEmployee = new List<EmployeeRoleDept>
{
new EmployeeRoleDept{ RoleId = 1 ,RoleName="CEO",DeptartmentId = 1 , DeptartmentName = string.Empty, ProjectId = 1,ProjectName=string.Empty},
new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 2, DeptartmentName = "Dept A", ProjectId = 2,ProjectName="Project 2"},
new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 2 ,DeptartmentName = "Dept A", ProjectId = 3,ProjectName="Project 3"},
new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 3, DeptartmentName = "Dept B", ProjectId = 4,ProjectName="Project 4"},
new EmployeeRoleDept{ RoleId = 2, RoleName="PM", DeptartmentId = 3 ,DeptartmentName = "Dept B", ProjectId = 5,ProjectName="Project 5"},
new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 4 ,DeptartmentName = "Dept C", ProjectId = 6,ProjectName="Project 6"},
new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 4 ,DeptartmentName = "Dept C", ProjectId = 7,ProjectName="Project 7"},
new EmployeeRoleDept{ RoleId = 3, RoleName="Dev",DeptartmentId = 5 ,DeptartmentName = "Dept D", ProjectId = 8,ProjectName="Project 8"},
new EmployeeRoleDept{ RoleId = 4, RoleName="Tester",DeptartmentId = 4,DeptartmentName = "Dept C" , ProjectId = 6,ProjectName="Project 6"},
new EmployeeRoleDept{ RoleId = 4, RoleName="Tester",DeptartmentId = 6,DeptartmentName = "Dept E" , ProjectId = 9,ProjectName="Project 9"},
};
如果该员工是某个部门的项目经理(PM),他将是该部门所有项目的PM。因此,项目名称不需要显示在网格中。
所以我想我们必须把它归为RoleId的w.r.t,如果他是首相的话
我试着把他们和RoleId一起分组
var grouplist = listEmployee.GroupBy(x => x.RoleId==2).ToList();
但是我只得到一个组,其中只有一个PM角色,其余的角色在第二个组中。GroupBy方法使用一个函数,该函数向GroupBy返回一个值。因为返回的是布尔表达式,所以将数据分为两组:
true
(RoleId==2
)和false
(其他所有人)
您可能不需要在此处进行分组。这会给你你想要的数据
var summarizedList = listEmployee
.Select(e => new {
RoleName = e.RoleName,
DeptName = e.DeptartmentName,
Project = (e.RoleId == 2 ? string.Empty : e.ProjectName)
})
.Distinct()
.ToList();
我不明白你的样本结果。为什么项目经理是空白的?作为一个部门的项目经理,他将是该部门所有项目的项目经理。因此,项目名称不需要显示在网格中。哦,是的!!我们不需要把它分组。。。呸!!在我的脑海里,有一个团体应该被申请,而我没有想到其他任何事情。。。。谢谢你,伙计。。
var summarizedList = listEmployee
.Select(e => new {
RoleName = e.RoleName,
DeptName = e.DeptartmentName,
Project = (e.RoleId == 2 ? string.Empty : e.ProjectName)
})
.Distinct()
.ToList();